Ecmascript 6 setTimeout使用async await关键字,但不知道它是如何工作的

Ecmascript 6 setTimeout使用async await关键字,但不知道它是如何工作的,ecmascript-6,async-await,settimeout,Ecmascript 6,Async Await,Settimeout,我正在使用javascript编程,偶然发现了这段代码,我想知道下面的代码是如何工作的,以及为什么工作的: var test = async () => { console.log("before"); await setTimeout(() => { console.log("after"); }, 1000); }; test(); 是这样的: 之前 之后 这是一个示例代码,但我的问题是它是如何工作的? setTimeout没有返回一个承诺,我认为asyn

我正在使用javascript编程,偶然发现了这段代码,我想知道下面的代码是如何工作的,以及为什么工作的:

var test = async () => {
  console.log("before");
  await setTimeout(() => {
    console.log("after");
  }, 1000);

};
test();
是这样的:

之前 之后 这是一个示例代码,但我的问题是它是如何工作的? setTimeout没有返回一个承诺,我认为async/Wait对不应该工作,或者是我缺少的东西?

根据

如果wait运算符后面的表达式的值不是承诺,则它将转换为已解析的承诺

因此,wait setTimeout表达式被转换为已解析的承诺。

好吧,它不起作用:

您将收到之前-之后-回调。等待不会停止任何事情,因为正如您所认识到的,setTimeout不会返回承诺。它等待undefined并继续执行下一条语句。你的例子只是缺少下一句话,所以你看不出有什么不同。下面是一个工作示例:

function delay(t) {
    return new Promise(resolve => setTimeout(resolve, t));
}
async function test() {
  console.log("before");
  await delay(1000);
  console.log("after");
}
test();

请阅读OP的问题响应setTimeout不会返回一个承诺,我认为异步/等待对不应该工作,或者是我缺少的东西?我认为真正的问题是:例如,异步调用是否真的需要redux thunk,或者这是ES6的一个功能,正在发挥一些魔力?此外,问题标题:在分派方法中使用async/await调用进行React和Redux,而不使用任何中间件。没有提到任何关于使用async/await的settimeout的内容。这是公平的,尽管我认为魔法问题值得解决。resolve=>setTimeoutt,也许?还是我也错过了什么?
function delay(t) {
    return new Promise(resolve => setTimeout(resolve, t));
}
async function test() {
  console.log("before");
  await delay(1000);
  console.log("after");
}
test();