Promise.coroutine
Promise.coroutine(GeneratorFunction(...arguments) generatorFunction, Object options) -> function
Возвращает функцию, которая может использовать yield для выдачи промисов. Управление возвращается обратно генератору, когда выданный промис завершается. Это может привести к более лаконичному коду при выполнении большого количества последовательных асинхронных вызовов с минимальной обработкой между ними. Требуется node.js 0.12+, io.js 1.0+ или Google Chrome 40+.
var Promise = require("bluebird");
function PingPong() {
}
PingPong.prototype.ping = Promise.coroutine(function* (val) {
console.log("Ping?", val);
yield Promise.delay(500);
this.pong(val+1);
});
PingPong.prototype.pong = Promise.coroutine(function* (val) {
console.log("Pong!", val);
yield Promise.delay(500);
this.ping(val+1);
});
var a = new PingPong();
a.ping(0);
Запуск примера:
$ node test.js Ping? 0 Pong! 1 Ping? 2 Pong! 3 Ping? 4 Pong! 5 Ping? 6 Pong! 7 Ping? 8 ...
При вызове функция корутины запустит экземпляр генератора и вернет промис для его конечного значения.
Использование Promise.coroutine почти так же, как использование ключевого слова C# async для обозначения функции, при этом yield работает как ключевое слово await. Промисы чем-то похожи на Task.
Совет
Вы можете выдать значения, не являющиеся промисами, добавив свой собственный обработчик yield с помощью Promise.coroutine.addYieldHandler или вызвав Promise.coroutine() с функцией обработчика yield как options.yieldHandler.
© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/promise.coroutine.html