Re: https://github.com/tildeio/rsvp.jsnasıl kolları başarısızlık geriçağırımlarının zinciri ile söz reddedilen rsvp.js
Ben bir süre için bir şey yapar ve daha sonra bir RSVP.Promise döndüren doSomething (adında bir işlevi) var. Ardından, bir başarı ve başarısızlık geri dönüşleri zinciri, geri verilen sözle kaydedilen 'dur (aşağıdaki kod). beklediğim davranış, eğer vaat yerine getirilirse, ile kaydedilen başarı geri dönüşler zincirinin kovulması söz konusu olacak ve eğer söz verilemezse (başarısız olursa), arıza geri çağırma zincirleri tetiklenecektir.
Söz verildikten sonra beklenen davranışı elde ediyorum, ancak söz verdiğim zaman reddedildiğimde beklediğimden farklı bir davranışı alıyorum. Yani, , başarı geri bildirimleri zincirlenir ve bir başarı geri dönüşünün çıkışı, zincirdeki bir sonraki başarı geri dönüşüne aktarılır. Ancak, başarısızlık geri arama zincirleri zincirleme değil görünüyor. Bir deneme/yakalama bloğundaki yakalama gibi davranırlar (bkz. Aşağıdaki kodu ve çıkışı).
birisi bu davranış açıklayabilir misiniz? Bu gerçekten çalışmak için varsayalım mı, yoksa bu , rsvp.js, onunla kaydedilmiş bir hata arızası zincirine sahip reddedilen/başarısız olan bir vaatte bulunma biçimindeki bir hata mıdır? Bunu denemek ve anlamaya çalışmak için şimdi Promises/A + spec'ı okuyorum, ama eğer birisi bu şeyleri başının üstünde biliyorsa, açıklamanızı duymak isterim. Şimdiden teşekkürler.
jsfiddle: Ben çıkış almak ve beklenen vaat yerine edildiğinde http://jsfiddle.net/rylie/VYSj7/2/
doSomething() // returns an RSVP.Promise object
.then(
function(message) { console.log("then success 1: " + message); return "from success 1"; }, // success callback
function(message) { console.log("then failure 1: " + message); return "from failure 1"; } // failure callback
)
.then(
function(message) { console.log("then success 2: " + message); return "from success 2"; }, // success callback
function(message) { console.log("then failure 2: " + message); return "from failure 2"; } // failure callback
)
.then(
function(message) { console.log("then success 3: " + message); return "from success 3"; } // success callback
)
.then(
null,
function(message) { console.log("then failure 4: " + message); return "from failure 4"; } // failure callback
)
.then(
function(message) { console.log("then success 5: " + message); return "from success 5"; }, // success callback
function(message) { console.log("then failure 5: " + message); return "from failure 5"; } // failure callback
);
** (başarılı), bu edilmektedir:
then success 1: Promise fulfilled!
then success 2: from success 1
then success 3: from success 2
then success 5: from success 3
** vaadi reddedilir
(başarısız), aldığım şu çıktı: (reddedildiğimde) bu beklediğim şeydir./Başarısız vaadi):then failure 1: Promise rejected!
then failure 2: from failure 1
then failure 4: from failure 2
then failure 5: from failure 4
Güzel açıklama, Esailija: Böyle bir yöntem sağlanmazsa Ancak, şunları yapabilirsiniz (veya olması gerektiği, ne yazık ki prototipler kullanmayan uygulamalar vardır)! Teşekkürler. – RBR