У меня есть функция, которая должна сделать что-то асинхронное, в несколько шагов. На каждом шагу он может потерпеть неудачу. Он может выйти из строя до первого шага, так что вы можете сразу узнать результат или через 1,5 секунды. Когда не удается, он должен выполнить обратный вызов. Idem когда это удается. (Я использую когда нарочно, потому что это не просто если:. Хронометраж важен)Цепочка асинхронных обещаний с 1 разрешением и 1 отказом?
Я думал Обещание совершенно, так как асинхронные и они решают только один раз, но он все еще имеет проблемы: когда это не удается? Я могу понять, когда это удается (после последнего шага), но когда это не удается? Внутри/перед любым шагом.
Это то, что у меня есть сейчас, но это смешно:
function clickSpeed() {
return new Promise(function(resolve, reject) {
if (test('one')) {
return setTimeout(function() {
if (test('two')) {
return setTimeout(function() {
if (test('three')) {
return setTimeout(function() {
console.log('resolving...');
resolve();
}, 500);
}
console.log('rejecting...');
reject();
}, 500);
}
console.log('rejecting...');
reject();
}, 500);
}
console.log('rejecting...');
reject();
});
}
(test()
случайно проходит или не шаг.)
Fiddle здесь: http://jsfiddle.net/rudiedirkx/zhdrjjx1/
Я предполагаю, что решение это цепочка обещаний, которая разрешает или отвергает каждый шаг.? Может быть. Это что? Как мне это реализовать?
Может ли это работать для неизвестного количества шагов?
Это терпит неудачу, как только вы позволите ему потерпеть неудачу. Не уверен, что я понимаю, в чем вопрос. – Bergi
Ожидаемый результат 'return' at' return setTimeout (function() {'? – guest271314
@ guest271314: Я думаю, что' return' существует только для предотвращения 'console.log ('rejecting ...'); reject(); 'от запуска – Bergi