に次のハンドラに値を渡すために活字体でPromise.allを使用すると、時々そうのような非同期処理のチェーンにおけるデータの再利用一部のビットにPromise.all
を使用することが有用である:缶にJavaScriptではチェーン
logMeIn()
.then(token => {
return Promise.all([
token,
fetchProfile(token)
])
})
.then(([token, profile]) => {
return getAvatar(token, {userId: profile.id})
})
// etc...
わかりましたが、2番目のthen
リゾルバは最初のリゾルバの結果を必要としますが、依然としてtoken
が必要です。 1つ目の方法は、2番目のthen
コールを最初に入れ子にすることですが、これは醜いことがあり、長いチェーンでは、コールバック・ヘルが緩和するように設計されていると約束します。
Promise.all()
を使用すると、以前のリゾルバからのデータを再利用し、チェーンに渡すことができます。
このすべてが素晴らしい作品が、あなたがしようとすると、このようなエラーでこれを行う際に活字体がフリップアウト:
型の引数「(文字列|約束<サムシング>)[]」パラメータに 割り当てられませんタイプ 'IterableShim <の何か| PromiseLike <何か> > 'です。プロパティの型 '"es6-shim iterator"' は互換性がありません。
タイプ '()= > IterableIteratorShim <文字列|プロミス<何か> > 'はタイプ'()= >に割り当てられませんイテレータ<何か| PromiseLike <何か> > 'です。
型の安全性を保ちながら、上記を実行できる方法がありますか?
お知らせをその一般的な問題のために、[他の多くのソリューション](http://stackoverflow.com/q/28250680/1048572)があります。 TypeScriptはすでに 'async' /' await'をサポートしていませんか? – Bergi
@Bergiこれは、TypeScriptが[variadic types](https://github.com/Microsoft/TypeScript/issues/5453)を取得したときにこの特定のパターンがサポートされる可能性がありますが、 –