roo*_*top 6 javascript jquery asynchronous promise
我有jQuery 1.9.1 promises的问题,我可能需要条件逻辑,它将返回另一个延迟,我不知道如何处理它.这是我最好的尝试,但正如下面的评论所示,当我点击其他分支时,我仍然按下第二个.then()函数,我希望我可以回到用户.如何处理这种情况的任何模式?
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()
});
Run Code Online (Sandbox Code Playgroud)
options.onSuccess(rc);通过获取在第二个中无条件执行.then()但从未在第一个中执行的视图,这会变得更容易。
因此,第一个.then()必须传递rc:
rc === 0, 响应storage.write(c)完成rc !== 0..then()对此确实很方便,因为它自然允许从其回调中返回新 Promise 的值done。
storage.provision(c).then(function(rc) {
if(rc === 0) {
var dfrd = $.Deferred();
storage.write(c).done(function() {
dfrd.resolve(rc);
}).fail(dfrd.fail);
return dfrd.promise();
} else {
return rc;//pass on rc to the second .then()
}
}).then(function(rc){
options.onSuccess(rc);
}).fail(function(e){
//handle error using .reject()
});
Run Code Online (Sandbox Code Playgroud)
我确信存在其他方法,但这是我能想到的最接近您最初概念的方法。
不必创建新的 Deferred when 会很好rc === 0,但这是传递的最现实的方法rc,避免了需要修改storage.write()以这种方式运行。
| 归档时间: |
|
| 查看次数: |
3538 次 |
| 最近记录: |