Когда я использую промисы для выражения зависимостей между заданиями, где разрешенное значение становится неважным, есть некоторая опасность, что я могу где-то забыть о возврате. Пример:
startSomething().then(function() {
Q.all(tasks.map(function(task) { return task.startIt(); }))
}).then(collectOutput).done();
Здесь Q.all
возвращает обещание, и я должен был вернуть его. Невыполнение этого требования означает, что к моменту вызова collectOutput
все задачи уже запущены, но нет никаких гарантий их завершения.
Этот тип ошибки приводит к состоянию гонки, и его может быть чрезвычайно сложно воспроизвести и отследить. Поэтому мне интересно, есть ли какой-нибудь инструмент, который поможет обнаружить и избежать такого рода проблем? Возможно, какая-то библиотека обещаний, которая предупреждает, когда функция по пути возвращает значение undefined? Или обнаруживает обещания без слушателей, как Bluebird делает для необработанных отклонений?
startSomething().then(() => Q.all(tasks.map(task => task.startIt())))
- person jib   schedule 24.12.2015