Следуя этому примеру
Часто задаваемые вопросы о Dojo: Как упорядочить асинхронные операции?
function doNext(previousValue) {
var dfd = new Deferred();
// perform some async logic; resolve the promise
setTimeout(function () {
var next = String.fromCharCode(previousValue.charCodeAt(previousValue.length - 1) + 1);
dfd.resolve(previousValue + next);
}, 50);
return dfd.promise;
}
var promise = doNext('a');
for (var i = 0; i < 9; i++) {
promise = promise.then(doNext);
}
promise.then(function (finalResult) {
// 'doNext' will have been invoked 10 times, each
// invocation only occurring after the previous one completed
// 'finalResult' will be the value returned
// by the last invocation of 'doNext': 'abcdefghijk'
console.log(finalResult);
});
Как мне выйти из цикла - т.е. прекратить обработку последующих вызовов функции doNext, когда doNext соответствует определенным критериям - например, остановить, когда следующим символом является 'd', и вернуть вычисленное значение до этой точки?
EDIT: до сих пор я пробовал использовать отложенный метод cancel (), но он просто убивает процесс и ничего не возвращает.
setTimeout(function () {
var next = String.fromCharCode(previousValue.charCodeAt(previousValue.length - 1) + 1);
if(previousValue + next == 'abc')
dfd.cancel('abc');
else
dfd.resolve(previousValue + next);
}, 50);