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

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

我对 async/await 执行有疑问。

示例代码

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

但是,如果附上return,结果值如下。

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

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

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

在第二种情况下,由于 promise 解包 你等待返回的内部 promises 与外部函数 promises 一起

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

之前添加 await

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