yield
ジェネレーターでのみキーワードを使用できます。問題を処理するthis.redis.get
には、コールバックを受け入れる代わりにプロミスを返す必要があります。これを行うにはpromisify
、コールバックを期待する関数を promise を返す関数に変換する関数を記述します。
function promisify(method) {
return function() {
var args = [].slice.call(arguments);
return new Promise(function(resolve, reject) {
method.apply(null, args.concat(function(e, r) {
e ? reject(e) : resolve(r);
}));
});
};
}
次に、次のように使用できます。
function *(next) {
var r = yield promisify(this.redis.get)('foo');
yield next;
}
あるいは、一部の Promise ライブラリはpromisify
関数を提供します。たとえば、bluebird の Promise.promisifyは次のように使用できます。
var Promise = require( 'bluebird' );
function *(next){
var redisGet = Promise.promisify( this.redis.get );
yield redisGet( 'foo' );
yield next;
}