首页 > 解决方案 > 如何在一个循环中执行所有函数,其中需要调用一些函数作为异步函数的回调

问题描述

我有一个混合了异步和同步功能的 javascript 对象,我正在使用 lodash map 来执行该对象的所有功能。

下面是我的代码,其中 args.actions 包含异步/同步函数的混合,我如何在 action2ReturnPromise 的 .then() 中执行 action3 ..?

注意:- 我知道 lodash map(),当与对象/集合一起使用时,执行顺序不确定。

let { action1, action2ReturnPromise, action3}   = actionService

let args = {
        actions: {
            action1,
            action2ReturnPromise,
            action3
        },
        someExtraArgs: 'Fooo'
}

动作调度程序

let actionDispatcher = (args) => { // An Iterator fuction to dispatch all the actions
        _.map(args.actions, (value, key) => { //args.actions are all the actions/function to be called
        _.isFunction(svc[key]) && svc[key](args); // svc is a class which has all the functions
        });
    }
actionDispatcher(args)

标签: javascriptasynchronousecmascript-6lodashes6-promise

解决方案


您可以利用异步函数,甚至使标准函数返回一个承诺:

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });

  let result = await promise; // wait till the promise resolves (*)

  alert(result); // "done!"
}

f();

推荐阅读