即使存在“ await”,异步功能也会返回待处理的承诺

时间:2020-02-08 17:08:28

标签: javascript node.js asynchronous async-await

我正在关注异步/等待教程。即使我复制1:1的代码,也无法按预期工作。

这是一个函数,它接受水果名称作为参数并相应地返回数字。它是异步的,因此它应该返回一个Promise。

const getFruit = async(name) => {
const fruits = {
    pineapple: 1,
    apple: 2,
    strawberry: 3
}

    return fruits[name]
}

按预期工作,进行getFruit("apple").then(result => console.log(result))会返回2。

然后,我有了第二个函数,该函数两次运行getFruit函数以获取两个数字,等待结果,然后将它们组合在一起。从理论上讲。

const makeSmoothie = async() => {
    const a = await getFruit("apple")
    const b = await getFruit("strawberry")
    const smoothie = [a, b]

    return smoothie
}

但是实际上,console.log(makeSmoothie())然后返回Promise { <pending> }。为什么?

此外,我知道实际上是在不必要的情况下阻止脚本在检索b之前获取值a。这样看起来更简单。分配两个值然后执行const smoothie = await Promise.all([a, b])也不起作用。结果相同。

0 个答案:

没有答案