【问题标题】:Accessing the await-ed value inline (JS)?访问等待的值内联(JS)?
【发布时间】:2020-07-01 05:11:53
【问题描述】:

首先我是这样写的:

(async function() {
    const value = await Promise.resolve({a: 3}).a
    console.log(value)
})().catch(console.error);

但我很快得出结论,这是行不通的,因为我们将等待 a 返回的 a 属性,这是未定义的。

所以我尝试将我的 await 调用包含在括号中:

(async function() {
    const value = await(Promise.resolve({a: 3})).a
    console.log(value)
})().catch(console.error);

这也不起作用。 (它记录undefined

因此,提取a 属性的唯一方法似乎是执行以下操作:

(async function() {
    const resolvedValue = await Promise.resolve({a: 3});
    let aProp = resolvedValue['a']; 
})().catch(console.error);

,这增加了不必要的代码行。

我这样喂食有点违背异步/等待的目的。这是正确的还是我遗漏了什么?

【问题讨论】:

    标签: javascript async-await


    【解决方案1】:

    您需要将await 关键字和promise 括在括号中,如下所示:

    const value = (await Promise.resolve({a: 3})).a;
    

    这样,您正在等待承诺,然后访问已解析值的 a 属性。

    await(Promise.resolve({a: 3})).a 不起作用,因为await 不是函数,而是运算符。

    【讨论】:

    • 我在 node 和 chrome 中运行代码,都显示“SyntaxError: Unexpected identifier”?
    • 谁能提供一些文档的链接或此语法的其他解释?
    【解决方案2】:

    你需要在一个承诺上await,而不是一个人的财产。 JavaScript 将期望 a 成为一个承诺,但事实并非如此。

    await 是一个操作符语句,而不是一个函数。

    【讨论】:

    • 这就是我尝试在我的第二个代码块中使用括号做的事情。
    • @BogdanM。 await 是一个语句,而不是一个函数。
    • 哎呀。我认为它是有效的。 (可能是因为您还可以将诸如throw 之类的语句包装到括号中)。谢谢!
    【解决方案3】:

    你总是可以解构:

    const { a: value } = await Promise.resolve({ a: 3})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      相关资源
      最近更新 更多