ブルーバード ライブラリでプロミスを正しく使用する方法を理解しようとしています。私は自分のコードでいくつかの入れ子になった約束に出くわしました.bluebirdのドキュメントで次のように書かれていることに気付きました:
完全な bluebird API オファリングを利用している場合、最初からネストされた promise に頼る必要はほとんどありません。
Promise の誤用については他にも多くのブログ記事があり、ネストは通常のアンチパターンです。
loadCar(someUri) // jqXHR
.then(function (car) {
if (carHasFourDoors(car)) {
loadMake(car.make)
.then(function (make) {
loadModel(make.model)
.then(function (model) {
loadCarDetails(model)
});
});
}
else if (carHasTwoDoors(car)) {
loadModel(make.model)
.then(function (model) {
loadCarDetails(model)
});
}
});
私の関数はすべてオブジェクトを返します。bluebird のドキュメントを見ると、複数のヘルパー メソッドがあるようです: all()、join()、props()。
だから、私の質問は次のとおりです。依存関係がある場合、ネストを回避するにはどうすればよいですか? おそらく、これはプロミスの非同期性に関する私の誤解です。このようなものは機能しますか?
Promise.all(loadCar(someUri), loadMake(car.make), loadModel(make.model))
.then(function(car, make, model) {
// do logic
});