首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步调用异步IIFE

同步调用异步IIFE
EN

Stack Overflow用户
提问于 2019-03-02 22:29:06
回答 1查看 189关注 0票数 2

我想按特定顺序引用几个IIFE:

假设我有以下IIFE:

代码语言:javascript
复制
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')
})();

我想这样引用它们:

代码语言:javascript
复制
foo1
foo2
foo3

...so,我可以得到以下输出:

代码语言:javascript
复制
A B C D E F G H I

但是,我实际得到的输出是:

代码语言:javascript
复制
A D G B E H C F I

我不知道为什么会这样,但我怀疑这是因为每次等待解析一个承诺时,它都会调用堆栈中的下一个函数。如何调用它们,以便它们同步执行,并获得所需的输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-02 22:32:29

您不希望同步执行它们。您希望按顺序异步执行它们。为此,您必须在执行下一次调用之前先await一个电话:

代码语言:javascript
复制
(async function() {
  let foo1 = await (async() => {
    //...
  })();

  let foo2 = await (async() => {
    //...
  })();

  let foo3 = await (async() => {
   //...
  })();
})();

尽管await on console.log没有多大意义,但在这里使用多个AIIFE也没有什么意义--那么,您只需要一个。

我怀疑这是因为每次等待解析承诺时,它都会调用堆栈中的下一个函数。

这是一个队列,但基本上是的。使用await总是会导致等待的表达式被包装成一个承诺,并且承诺总是异步地解析。因此,异步函数的执行将停止,下一个函数延续将从事件队列中退出并执行。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54963660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档