68

次のコードでコンパイル時エラーが発生します。

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

エラーメッセージは次のとおりです。

await は予約語です

なんでこんなに使えないの?

別の方法も試しましたが、同じエラーが発生します:

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

6 に答える 6

0

次の値に移る前に、リマップされた各値を解決したい場合は、配列を非同期反復可能オブジェクトとして処理できます。

以下では、ライブラリiter-opsを使用して、各値を promise に再マップし、解決された値を持つオブジェクトを生成しますmap

import {pipe, map, wait, toAsync} from 'iter-ops';

const i = pipe(
    toAsync(myArray), // make asynchronous
    map(myValue => {
        return service.getByValue(myValue).then(a => ({id: 'my_id', myValue: a}))
    }),
    wait() // wait for each promise
);

(async function() {
    for await (const a of i) {
        console.log(a); // print resulting objects
    }
})

各値の後、waitを使用して、生成されたリマップされた各値を解決し、解決要件を元の質問と一致させます。

于 2021-12-25T21:16:40.583 に答える