为什么 `await {then(){}}` 返回 `undefined`?

我无意中发现await {then(){}}的返回结果是undefined,请问有大佬知道是什么原因吗?

目前我将项目代码中的相关部分暂时改为await {thenDo(){}}(举例),确认是关键字await的底层实现缘故,不知前人是否有相关经验。

阅读 817
1 个回答
await {
  then(f: () => void) {
    // f();

    setTimeout(f, 1000);
  },
};

这个 await 表达式将在 then 方法传入的 onfulfilled 函数被调用时结束,一个空的 then 方法相当于永远不会调用 onfulfilled,也就永远不会结束。

带有 then 方法的对象是一个 PromiseLike 对象,会被 await 当成 Promise 来处理:

await {
  then(onfulfilled: () => void) {
    setTimeout(onfulfilled, 1000);
  },
};

console.log("其他代码");

等价于:

({
  then(onfulfilled: () => void) {
    setTimeout(onfulfilled, 1000);
  },
}).then(() => {
  console.log("其他代码");
});

如果 onfulfilled 没有被调用,那么 await 之后的代码也不会被执行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏