Nodejs async modülü: https://github.com/caolan/async , 2 benzer yöntem sağlar async.waterfall
ve async.series
.
Onların arasındaki fark ne?
Nodejs async modülü: https://github.com/caolan/async , 2 benzer yöntem sağlar async.waterfall
ve async.series
.
Onların arasındaki fark ne?
Yanıtlar:
Görünüşe göre async.waterfall
, her işlevin sonuçlarını bir sonraki işleve aktarırken async.series
, tüm sonuçları son geri aramaya aktarır. Daha yüksek bir seviyede, async.waterfall
bir veri hattı için ("2 verildi, 3 ile çarp, 2 ekle ve 17 ile böl"), async.series
sırayla gerçekleştirilmesi gereken, ancak aksi takdirde ayrı olan ayrı görevler için olacaktır.
waterfall
de series
döndürülür. Sonuç ne olursa olsun, isteğe bağlı geri arama parametresinde kullanılması beklenir.
Her iki işlev de her işlevin dönüş değerini bir sonrakine geçirir, sonra tamamlandığında ana geri aramayı çağırır ve bir hata olursa onun hatasını iletir.
Aradaki fark, async.series()
seri bittikten sonra tüm sonuçları ana geri aramaya aktaracak olmasıdır. async.waterfall()
ana geri aramaya yalnızca son çağrılan işlevin sonucunu aktarır.
async.waterfall()
bir ile uğraşıyor action that relies on the previous outcome
.
async.series()
yapmak isteyen bir eylemle uğraşmak see all the result at the end
Async.waterfall'ın zararlı olduğunu düşünüyorum, çünkü bir kez yazıldıktan sonra yeniden düzenleme yapmak zordur ve ayrıca daha fazla argüman sağlarsanız, diğer işlevler imzayı çok değiştirir.
async.autoInject
Async.waterfall'a harika bir alternatif olarak şiddetle tavsiye ederim .
https://caolan.github.io/async/autoInject.js.html
Async.waterfall kullanmayı seçerseniz, her şeyi tek bir nesnede saklamanızı öneririm, böylece işlevlerinizin uzunluğu / imzaları değiştirmesine gerek kalmaz, örneğin:
uyarı: bu kötü bir model
async.waterfall([
cb => {
cb(null, "one", "two");
},
(one, two, cb) => {
cb(null, 1, 2, 3, 4);
},
(one,two,three,four,cb) => {
// ...
}
])
bunu yukarıdaki şekilde yapma. Bu, kullanmak için çok daha iyi bir model :
async.waterfall([
cb => {
cb(null, {one:"one", two:"two"});
},
(v, cb) => {
cb(null, [1, 2, 3, 4]);
},
(v,cb) => {
// ...
}
])
bu şekilde, işlev argümanlarının doğru uzunluğa sahip olduğundan emin olmaya çalışırken saçınızı çekmezsiniz. İlk işlev yalnızca bir argüman kabul eder - geri çağırma. Kalanların tümü iki bağımsız değişkeni kabul etmelidir - bir değer ve geri arama. Desene bağlı kal ve aklı başında kalacaksın!