编程语言
首页 > 编程语言> > javascript – 在Array#map()中异步/等待

javascript – 在Array#map()中异步/等待

作者:互联网

我用这段代码得到编译时错误:

const someFunction = async (myArray) => {
    return myArray.map(myValue => {
        return {
            id: "my_id",
            myValue: await service.getByValue(myValue);
        }
    });
};

错误信息是:

await is a reserved word

为什么我不能这样使用它?

我也尝试了另一种方式,但它给了我同样的错误:

 const someFunction = async (myArray) => {
    return myArray.map(myValue => {
        const myNewValue = await service.getByValue(myValue);
        return {
            id: "my_id",
            myValue: myNewValue 
        }
    });
};

解决方法:

您无法按照您的想象执行此操作,因为如果它不直接位于异步函数内,则无法使用等待.

这里明智的做法是将函数传递给map异步.这意味着map将返回一个promises数组.然后我们可以使用Promise.all在所有promise返回时获得结果.由于Promise.all本身返回一个promise,外部函数不需要是异步的.

const someFunction = (myArray) => {
    const promises = myArray.map(async (myValue) => {
        return {
            id: "my_id",
            myValue: await service.getByValue(myValue)
        }
    });
    return Promise.all(promises);
}

标签:ecmascript-2017,javascript,async-await
来源: https://codeday.me/bug/20190926/1821982.html