我想按特定顺序引用几个IIFE:
假设我有以下IIFE:
let foo1 = (async() => {
await console.log('A')
await console.log('B')
await console.log('C')
})();
let foo2 = (async() => {
await console.log('D')
await console.log('E')
await console.log('F')
})();
let foo3 = (async() => {
await console.log('G')
await console.log('H')
await console.log('I')
})();我想这样引用它们:
foo1
foo2
foo3...so,我可以得到以下输出:
A B C D E F G H I但是,我实际得到的输出是:
A D G B E H C F I我不知道为什么会这样,但我怀疑这是因为每次等待解析一个承诺时,它都会调用堆栈中的下一个函数。如何调用它们,以便它们同步执行,并获得所需的输出?
发布于 2019-03-02 22:32:29
您不希望同步执行它们。您希望按顺序异步执行它们。为此,您必须在执行下一次调用之前先await一个电话:
(async function() {
let foo1 = await (async() => {
//...
})();
let foo2 = await (async() => {
//...
})();
let foo3 = await (async() => {
//...
})();
})();尽管await on console.log没有多大意义,但在这里使用多个AIIFE也没有什么意义--那么,您只需要一个。
我怀疑这是因为每次等待解析承诺时,它都会调用堆栈中的下一个函数。
这是一个队列,但基本上是的。使用await总是会导致等待的表达式被包装成一个承诺,并且承诺总是异步地解析。因此,异步函数的执行将停止,下一个函数延续将从事件队列中退出并执行。
https://stackoverflow.com/questions/54963660
复制相似问题