Вы должны были бы проверить состояние (о том, следует ли отменить или нет) внутри каждого цепного метода:
var userRequestedCancel = false;
this
.getData()
.then(function() {
if(userRequestedCancel) {
return Promise.reject('user cancelled');
}
return getMoreData();
})
.then(function() {
if(userRequestedCancel) {
return Promise.reject('user cancelled');
}
return getEvenMoreData();
})
Или, возможно, немного более элегантным способом (отредактированный передать контекст и аргументы в callback
методы)
var currentReq = false;
var userRequestedCancel = false;
var shouldContinue = function(cb,args) {
if(userRequestedCancel) {
return Promise.reject('user cancelled');
}
currentReq = cb.apply(this,args);
return currentReq;
}
var onCancel = function() {
userRequestedCancel = true;
currentReq && currentReq.abort();
}
this
.getData()
.then(function() {
return shouldContinue(getMoreData,arguments);
})
.then(function() {
return shouldContinue(getEvenMoreData,arguments);
})
Если вам нужно отменить текущий запрос, а также, что является своего рода тривиальное, установить текущее ajax
запрос быть глобальной переменной, и что когда событие event устанавливает флаг userRequestedCancel
в true, также отмените запрос ajax
(см. отредактированный код выше)
Что вы подразумеваете под "пользователем"? Это фрагмент кода, который выполняется как можно быстрее, как бы вы добавили здесь вмешательство пользователя? – tadman
Сайт получает много данных. Если пользователь затем запрашивает другие данные, я хочу остановить получение текущего набора данных и их вывод. – panthro
Так как же это получится? Есть ли объект состояния для этого запроса, который указывает, что он был отменен, например 'var state = {running: true}', и затем вы можете проверить 'if (state.running) {return this.getMoreData()}' по мере необходимости. – tadman