javascript await -它如何知道解析结果

yrdbyhpb  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(121)

来自教程:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

function resolveAfter2Seconds(x) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

async function f1() {
  const x = await resolveAfter2Seconds(10);
  console.log(x); // 10
}

f1();

我可以看到10一直进入resolve(x),但它似乎没有从resolve函数中出去。文档说Promise.resolve返回另一个Promise,但我没有看到任何代码将这个新的Promise。我也没有看到任何代码将x返回到外部作用域。文档似乎没有解释这一点,或者我只是不明白
await关键字如何知道返回值是10

s2j5cfk0

s2j5cfk01#

因为resolve将promise的resolved值设置为您传递给它的值,并且await等待直到promise被resolved(或rejected)并返回resolved值(或抛出,如果promise被拒绝)。
Promise.resolve是一个不同的野兽-它返回一个已经解决的promise。
因为你传递了一个你自己设计的新函数给new Promise,你可以把它命名为resolve,例如ok,如果这样更清楚的话:new Promise((ok) => ok(8))(但请不要;约定是resolve)。
你不需要知道JavaScript引擎内部到底发生了什么,promise就可以工作。

rjzwgtxy

rjzwgtxy2#

文件上写着承诺,解决
不要混淆Promise类的静态resolve方法和作为第一个参数传递给new Promise构造函数的函数。
我也没有看到任何代码将x返回到外部作用域
因为x没有返回。
你不能从一个异步操作中返回,这就是Promise存在的原因。
resolveAfter2Seconds返回promise。
这个promise的值为x
awaitf1发送到休眠状态,直到其RHS上的promise解决。
当它这样做时,它成为分配给另一个x的解析值。

相关问题