web-dev-qa-db-ja.com

チェーン非同期機能

非同期関数では、次のような非同期値を取得できます。

const foo = await myAsyncFunction()

結果に対してメソッドを呼び出したい場合は、sync関数を使用してmyAsyncFunction().somethingElse()のようなものを実行します

非同期関数で呼び出しをチェーンすることは可能ですか、または各結果に新しい変数を割り当てる必要がありますか?

16
Asherlc

式で待つことができ、新しい変数に割り当てる必要はありません。

const foo = await (await myAsyncFunction()).somethingElseAsync()

または、結果に対して同期メソッドを呼び出したい場合:

const foo = (await myAsyncFunction()).somethingElseSync()
28
Tamas Hegedus

この回答await式を括弧で囲んだTamas HegedusによるバニラJavaScriptの使い方は間違いありません。

あるいは、一般的にチェーン化されたJSメソッドを探していて、サードパーティのモジュールを気にしない場合は、npmで async-af を使用できます。これにより、非同期メソッドを次のようにチェーンできます。

const promises = [1, 2, 3].map(n => Promise.resolve(n));

AsyncAF(promises).map(n => n * 2).filter(n => n !== 4).forEach(n => console.log(n));
// logs 2 then 6
<script src="https://unpkg.com/[email protected]/index.js"></script>
1
Scott Rudiger