【发布时间】:2020-02-16 01:25:39
【问题描述】:
我有两个异步操作,因此第二个操作的调用使用第一个输出的输入。用async 和await 实现这样的调用,看起来与回调并没有太大的不同。
考虑一下。
async function loop(label, I) {
console.log('%s - Looping for %d times.', label, I)
console.time(label)
for (i = 0; i < I; ++i) {
}
return Promise.resolve(I)
}
//
async function demo0() {
// Refer - https://stackoverflow.com/a/45479579/919480
let I0 = loop('01', 10)
let I1 = loop('02', I0 * 1000)
await I0
await I1
}
//
async function demo1() {
// Refer - https://stackoverflow.com/a/45479579/919480
let I0 = loop('11', 10)
await I0
let I1 = loop('12', I0 * 1000)
await I1
}
//
async function demo2() {
await loop('21', 10).then(async (i) => {
await loop('22', i * 1000)
})
}
//
(async () => {
await demo0()
await demo1()
await demo2()
})()
结果:
01 - Looping for 10 times.
02 - Looping for NaN times.
11 - Looping for 10 times.
12 - Looping for NaN times.
21 - Looping for 10 times.
22 - Looping for 10000 times.
第二个循环应该基于第一个循环传递的值进行迭代。在demo0 和demo1 中,第二个循环收到NaN,因为它们是同时触发的。只有在demo2 中,第二个循环才会收到正确的值。也可以通过回调实现这一行为。
有没有async/await 方法来实现这种行为?
【问题讨论】:
标签: javascript node.js asynchronous async-await