't vaatler sadece geri deÄŸil mi?
JavaScript birkaç yıldır geliştirmekte olduğum ve sözleri hakkında yaygara hiç anlamıyorum.
Tek yaptığım değişiklik gibi görünüyor:
api(function(result){
api2(function(result2){
api3(function(result3){
// do work
});
});
});
Her neyse, bir şey gibi: async gibi bir kütüphane benim için çok iyi olabilir
api().then(function(result){
api2().then(function(result2){
api3().then(function(result3){
// do work
});
});
});
Daha fazla kod ve daha az okunabilir. Burada bir şey elde edemedim, aniden sihirli bir şekilde 'düz' ya da değil. Sözleri şeyleri dönüştürmek zorunda bahsetmiyorum bile.
Vaatler burada hakkında büyük yaygara nedir?
CEVAP
Vaatler değil geri. Söz temsil ederzaman uyumsuz bir işlem gelecek sonuç. Tabii ki, onları senin gibi yazmaya, biraz parası olsun. Ama eğer onları kullanmış olması gerektiği şekilde yazarsanız, zaman uyumlu kod benzer bir şekilde zaman uyumsuz kod yazabilirsiniz ve izleyin çok daha kolay
api().then(function(result){
return api2();
}).then(function(result2){
return api3();
}).then(function(result3){
// do work
});
Kesinlikle, çok daha az kod değil, ama çok daha okunabilir.
Ama bu son değil. Eğer adımlardan herhangi birini herhangi bir hata için kontrol etmek istedim Ne? hadi gerçek faydalarını keşfedin: Geri aramaları ile bunu yapmak için cehennem olurdu, ama sözler, bir parça kek
api().then(function(result){
return api2();
}).then(function(result2){
return api3();
}).then(function(result3){
// do work
}).catch(function(error) {
//handle any error that may occur before this point
});
Oldukça fazla try { ... } catch bir blok olarak aynı.
Daha iyi bile
api().then(function(result){
return api2();
}).then(function(result2){
return api3();
}).then(function(result3){
// do work
}).catch(function(error) {
//handle any error that may occur before this point
}).then(function() {
//do something whether there was an error or not
//like hiding an spinner if you were performing an AJAX request.
});
Ve hatta daha iyi. Eğer bu 3, *, *14apiapi2 aynı anda çalıştırabilir (onlar AJAX çağrıları vardı) ama üç beklemen gerektiği için ararsa ne? Sözler olmadan, sayaç bir tür oluşturmak için olmalıdır. Vaatlerle, ES6 gösterim kullanarak, bir parça daha kek ve çok zarif
Promise.all([api(), api2(), api3()]).then(function(result) {
//do work. result is an array contains the values of the three fulfilled promises.
}).catch(function(error) {
//handle the error. At least one of the promises rejected.
});
Yeni bir ışık Vaat ediyor şimdi seni görmek dileğiyle.

Çıkış, net Faaliyet geçmişi yığını, ön...
Açıkça bir fonksiyonu geri arama ya da...
Neden viewWillAppear bir uygulama arka...
Nasıl Gıt hazırlama alanından tek bir ...
Nasıl JavaScript ana öğe ve alt öğeler...