2013-03-20 17 views
6

jQuery 1.9.1 vaatleriyle ilgili bir sorunum var; burada potansiyel olarak ertelenmiş başka bir döneme dönecek mantığa ihtiyacım var ve nasıl ele alınacağından emin değilim. Bu benim en iyi denememdi, ancak yorumlar aşağıda belirtildiği gibi, diğer şubeye geçtiğimde, yine de ikinci .then() işlevine basıyorum, ki şimdi kullanıcıya geri dönebileceğimi umuyordum. Böyle bir senaryonun nasıl ele alınacağı ile ilgili herhangi bir desen var mı?Promises ile şubeleri işleme

storage.provision(c) 

.then(function(rc){ 
    if(rc === 0){ 
     storage.write(c); 
    }else{ 
     return options.onSuccess(rc); //how i got back to the users callbacks/promise, but this 
     //takes me to the .then below 
    } 
}) 
//storage.write returns a promise as well, do I do another .then 
// like this? 
.then(function(rc){ 
    //I was hoping this would catch, the storage.write() case, and it does, but it also catches 
    //the retun options.onSuccess(rc) in the else case. 
    options.onSuccess(rc); 
}) 


.fail(function(e){ 
    //handle error using .reject() 
}); 
+0

Bu gönderi size yardımcı olabilir: http://stackoverflow.com/questions/12149993/attempting-to-break-jquery-promise-chain-with-then-fail-and-reject – mattytommo

+0

[Bu gönderi] (http: //net.tutsplus.com/tutorials/javascript-ajax/wrangle-async-tasks-with-jquery-promises/) sözleri daha iyi anlamanıza yardımcı olacak. Genelde koşullu kullanmak istiyorsanız, söz verdiğiniz sözü bir değişken olarak saklamanız ve koşullarınızda “o zaman” başarısını ya da “başarısızlığınızı” yürütmeniz gerekir, bunu başka bir şekilde yapıyor gibi görünüyorsunuz. – acconrad

cevap

4

Bu options.onSuccess(rc); ama asla birinci ikinci .then() koşulsuz yürütülür görüşünü alarak daha kolay olur.

  • rc === 0 eğer storage.write(c) yanıt olarak
  • veya derhal rc !== 0 tamamlayan:

    Böylece, birinci .then() ya rc geçmek gerekir. doğal olarak verir ya yeni Promise'in bir değeri done callback'inde gelen iade edilecek çünkü

.then() bunun için gerçekten kullanışlı.

Diğer yaklaşımların var olduğundan eminim, ancak bu, orijinal konseptinize en yakın düşünebildiğim. Iyi olurdu

rc === 0 ama, rc geçen bu şekilde davranmaya storage.write() değiştirme ihtiyacını ortadan en gerçekçi yaklaşım olduğunda Ertelendi yeni oluşturmak zorunda değildir.

İlgili konular