Spec-Zone.ru › Bluebird

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API