Javascript “resolveAfter2Seconds”如何返回20?

Javascript “resolveAfter2Seconds”如何返回20?,javascript,Javascript,下面的代码来自 我不明白如何在2秒(20)后返回变量a的20 在我看来,从解析承诺中获取“返回值”的唯一方法是使用Promise.prototype.then()。下面的代码不使用then(),但仍然可以获得20。为什么?我是遗漏了什么还是误解了什么 function resolveAfter2Seconds(x) { return new Promise(resolve => { setTimeout(() => { resolv

下面的代码来自

我不明白如何在2秒(20)后返回变量a的
20

在我看来,从
解析承诺中获取“返回值”的唯一方法是使用
Promise.prototype.then()
。下面的代码不使用
then()
,但仍然可以获得
20
。为什么?我是遗漏了什么还是误解了什么

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

async function add1(x) {
  var a = resolveAfter2Seconds(20);
  var b = resolveAfter2Seconds(30);
  return x + await a + await b;
}

add1(10).then(v => {
  console.log(v);  // prints 60 after 2 seconds.
});

async function add2(x) {
  var a = await resolveAfter2Seconds(20);
  var b = await resolveAfter2Seconds(30);
  return x + a + b;
}

add2(10).then(v => {
  console.log(v);  // prints 60 after 4 seconds.
});

wait
将返回已解析的值

如果将承诺传递给wait表达式,它将等待 Promise的解析并返回解析的值

等待返回解析值 但是 不返回拒绝的值 为此,我们需要使用
try catch
块。您可以参考以下示例:

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

async function add1(x) {

 try {
  return await resolveAfter2Seconds(20);
 } catch (e) {
  return e
 }

}

add1(10).then(v => {
 console.log(v);
});

解析(x)其中x为20?等待与然后执行相同的操作。。。然后(v=>)==v=等待prom<代码>a
不是
20
<代码>等待a是
20
@Jonasw您是对的,等待文档也提到了这一点。非常感谢。