我有一个对象,它公开了一种异步获取某些数据的方法。该方法运行两个AJAX请求,但第二个请求依赖于第一个请求,因此需要等待第一个请求成功。中止嵌套ajax调用/做承诺改善此代码?
在对象之外,没有人需要知道两个AJAX请求正在发生。但是,我确实需要能够中止请求。这导致我引入了一个竞赛条件。
下面是一些伪代码:
function foo (options) {
var jqXHR = $.ajax({
success: function(){
console.log('jqXHR success');
var innerJqXHR = $.ajax({
success: options.success,
error: options.error
});
}
});
return jqXHR;
}
var jqXHR = foo({
success: function(){
console.log('innerJqXHR success');
}
});
// Abort, fails if jqXHR success has already been called.
jqXHR.abort();
如果中止方法遇到的第一个回调成功之后再把第二个回调仍将继续。
解决此问题的好方法是什么?我有一个偷偷摸摸的怀疑,这是承诺擅长的事情,但我不能看到他们如何在这里使用。
相似的问题在这里(相同作者):http://stackoverflow.com/questions/28401679/rejecting-inner-promise-after-initial-promise-has-succeeded/28401933 – jfriend00 2015-02-09 02:58:54
是啊,对不起,我只是没有'没有使用承诺,我认为这个例子更像是一个真实世界的例子,而不是这个人为的例子。 – 2015-02-09 03:44:21