Как выполнить все функции в цикле, где некоторые функции необходимо вызывать как обратный вызов асинхронной функции - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть объект javascript, который имеет сочетание функций асинхронности и синхронизации, я использую карту lodash для выполнения всех функций этого объекта.

Ниже приведен мой код, в котором args.actions содержит смесьАсинхронные / синхронизирующие функции, как я могу выполнить action3 в .then () action2ReturnPromise ..?

Примечание: - Мне известно о lodash map (), что порядок выполнения не уверен при использовании с object /коллекция.

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)

1 Ответ

0 голосов
/ 29 апреля 2019

Вы можете воспользоваться асинхронными функциями , даже стандартная функция возвращает обещание:

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();
...