繁体   English   中英

如果我使用 async/await,它不会按顺序运行

[英]If I use async/await, it doesn't run in order

我对异步/等待执行有疑问。

示例代码

async firstMethod(){
  new Promise((resolve, reject)) => {
     setTimeout(() => {
        resolve("test1");
     }, 3000);     
  });
}

async secondMethod() {
  new Promise((resolve, reject)) => {
     setTimeout(() => {
        resolve("test2");
     }, 1000);     
  });
}

await firstMethod();
await secondMethod();

因此,当执行这两个方法时,会得到以下结果。

test2
test1

但是,如果附加返回,则结果值如下。

async firstMethod(){
  return new Promise((resolve, reject)) => {
     setTimeout(() => {
        resolve("test1");
     }, 3000);     
  });
}

async secondMethod() {
  return new Promise((resolve, reject)) => {
     setTimeout(() => {
        resolve("test2");
     }, 1000);     
  });
}

await firstMethod();
await secondMethod();
test1
test2

这是为什么? 如果您能解释一下,我将不胜感激。

在第一种情况下,您只需等待外部 Promise(即firstMethodsecondMethod函数), new Promise创建的内部 Promise 不会被等待,而只是在后台运行完成。

在第二种情况下,您等待返回的内部承诺以及外部 function 承诺。

在第一个示例中,这两个函数没有按顺序运行的原因是因为您没有等待任何东西。 如果您尝试从第一个示例中的 function 定义中删除async ,您将得到相同的结果,因为 function 不需要async ,因为它不需要await 在第二个例子中,你可以做的是在new Promise之前添加一个await来获得相同的结果。

注意:您也不需要第二个示例中的async ,因为您没有等待任何东西,您只是返回一个Promise ,您在其中等待 scope。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM