理解承诺和等待

Fra*_*ank 3 javascript promise async-await

我只是想了解PromisesAwait是如何工作的.
我希望通过1, 2, 3以该顺序登录来解决此问题.目前它记录1, 3, 2.

我知道Promise在这里没有意义,但在我的程序中它有其他用途,所以需要留下来.从Caller功能到Test需要留下的路线(如果需要你可以改变这些但只是知道他们在那里是有原因的)

我的问题是如何等待Caller函数解决?

这是我的代码:

function Test() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('2');
      resolve();
    }, 2000);
  })
}

function Caller() {
  Test();
}

console.log('1');
Caller();
console.log('3');
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我所理解的,即使Caller()函数等待Test Promise,但这当然使得Caller()函数异步,因此我们仍然得到1,3,2

async function Caller() {
    await Test();
}
Run Code Online (Sandbox Code Playgroud)

是否有一些方法可以使用await而不使函数异步?

Que*_*tin 5

  • 你只能使用await一个返回一个promise的函数(嗯,不完全正确,如果它没有返回一个它创建一个立即解析的promise的promise)
  • 只有await在异步函数内部时才能使用

function test() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('2');
      resolve();
    }, 2000);
  })
}

async function caller() {
  console.log('1');
  await test();
  console.log('3 (this is blocked awaiting the promise');
}

caller()
console.log("This is not blocked because caller is async");
Run Code Online (Sandbox Code Playgroud)