javascript - 如何在一个循环中执行所有函数,其中需要调用一些函数作为异步函数的回调
问题描述
我有一个混合了异步和同步功能的 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)
解决方案
您可以利用异步函数,甚至使标准函数返回一个承诺:
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();
推荐阅读
- r - R: 如何在 group_by 之后使用 group_map 运行自定义函数?
- java - 一遍又一遍地播放相同的视频几个小时后,JavaFX 视频卡顿
- python - 如何打印 Python 变量作为 XML 文件的属性值
- java - 执行 DB 连接语句时出现 java.lang.ClassNotFoundException
- python - python中三对角矩阵的解决方案是什么?
- java - 单链表还原中的错误
- python - 在 Mac 10.14 上使用 pip 安装 python-igraph 失败,并出现“找不到 -lstdc++ 的库”
- firebase - 与守护程序的连接无效
- atom-editor - 是否有键盘快捷键可以关闭 Atom in Hydrogen 中的内联单元格输出?
- c++ - 当clang编译到目标wasm时未定义的符号