【发布时间】:2021-12-30 16:24:59
【问题描述】:
(A prior version of this question 被关闭作为如何在循环中调用异步函数的重复。这个版本明确指出函数不是异步的)
我有几个无法修改的回调样式函数。仅更改 ABC 函数,如何以与 D 变量中存在的函数相同的顺序获得输出。我尝试使用 async-await,但由于超时事件,输出为 ['123', 'ankit', '345']。
https://jsfiddle.net/ankitg1602/unrxv3k6
const A = (dev) => {
setTimeout(() => {
dev('ankit')
}, 300)
}
const B = (dev) => {
setTimeout(() => {
dev('123')
}, 50)
}
const C = (dev) => {
setTimeout(() => {
dev('345')
}, 500)
}
const D = [A, B, C]
const ABC = (args, dev) => {
// write your code here
Promise.all(D.map(async (fun1) => {
return await fun1(dev)
}))
}
ABC(D, (result) => {
console.log('result:', result) // ['ankit', 123, 345]
})
【问题讨论】:
-
需要将
resolve函数传递给A等 -
虽然我有点同意你最后一个问题的副本不太准确,但至少自愿提及情况会更开放(人们可以看到已经发布的内容)。
-
A、B或C的任何函数都不会返回承诺,因此除非您通过例如来自 Promise 构造函数的resolve回调(您没有),await没有任何内容。 -
@DanielA.White jsfiddle.net/ankitg1602/unrxv3k6 如果您知道答案,请编辑并分享答案。
-
使用@ASDFGerte 的建议进行编辑,以明确与未能阐明核心问题的先前问题的关系。
标签: javascript arrays asynchronous async-await