2016-11-30 58 views
3

首先我写了这样的事情:访问内联(JS)的await-ed值?

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

但我很快就得出结论,这是不会工作的,因为我们要在等待什么Promise.resolve回报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); 

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

我喂这样有点失败异步的目的/等待。这是正确的还是我错过了什么?

回答

4

你需要用的await关键字和承诺在括号中,这样的:

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

这样,你等待的承诺,然后访问解析值的a财产。

await(Promise.resolve({a: 3})).a不起作用,因为await不是功能,而是运营商。

+0

我在节点和chrome中运行代码,都显示“SyntaxError:意外的标识符”? – Denly

+0

@Denly https://stackoverflow.com/q/42225480/3853934 –

4

需要await上一个承诺,而不是一个的属性。 JavaScript预计a是一个承诺,但不是。

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

+0

这就是我在第二段代码中用圆括号做的事。 –

+0

@BogdanM。 “await”是一个声明,而不是一个函数。 –

+0

哎呦。我认为这是有效的。 (可能是因为你也可以将诸如'throw'之类的语句包装到括号中)。谢谢! –