Предположим, у нас есть 3 обещания, и мы передаем их в $ q.all. Это вернет новое обещание, которое будет разрешено, когда будут разрешены 3 обещания.
Теперь, если до 3 обещаний разрешено, я на самом деле решаю, что я хочу, чтобы 4-е обещание было разрешено, может ли это быть сделано?
Я пытался что-то вроде:
var promises = [promise1, promise2, promise3];
var allDone = $q.all(promises);
promises.push(promise4);
В вышеприведенном allDone
решена, как только первые 3 обещания будут решены, но я хотел бы, чтобы ждать 4-го обещания, а также.
Или я пропущу точку обещаний здесь? Может быть, я не должен использовать обещания для таких случаев?
Обновление: Как ответ, $ q.all не способен делать то, что я хочу. Мой вопрос: есть ли другой способ узнать, когда динамический набор обещаний будет разрешен, так что даже если этот набор изменится?
Хм, но это потребовало бы, чтобы я каким-то образом отменил любой .then() обратный вызов, прикрепленный к первому $ q.all. Я надеялся на более простое решение :-). – user125661
@ user125661 - Вы зарегистрировали обработчик для выполнения трех обещаний. Вы не можете это изменить. Вы можете добавить новых обработчиков, которые будут уведомлять вас о вновь созданных условиях. Если, когда у вас есть первые три обещания, вы знаете, что у вас может быть больше обещаний до того, как будут выполнены первые три, а затем не зарегистрируйте окончательный обработчик. Зарегистрируйте обработчик макета, чья работа заключается в том, чтобы проверить, есть ли еще какие-либо обещания, которые вам также нужно ждать, а если нет, то он может вызвать обработчик. – jfriend00
это имеет смысл! Другое решение, которое я решил, может заключаться в том, чтобы добавить фиктивное обещание к набору из четырех обещаний.Как только я узнаю, что первоначальный набор обещаний должен быть изменен, я могу отказаться от этого обещания и установить новый $ q.all, как вы сказали выше. – user125661