【发布时间】:2015-02-09 07:33:32
【问题描述】:
我有一个对象,它公开了一种异步获取某些数据的方法。该方法运行两个 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();
如果在第一个回调成功后运行 abort 方法,则第二个回调将继续。
解决这个问题的好方法是什么?我暗自怀疑这是 promise 擅长的事情,但我无法看到它们在这里如何使用。
【问题讨论】:
-
这里有类似的问题(同一作者):stackoverflow.com/questions/28401679/…
-
是的,对不起,我只是没有使用 Promise,我认为这个例子比这个人为的例子更像是一个现实世界的例子。