Promisifying node.js类生成器方法

时间:2016-06-16 07:28:45

标签: node.js bluebird es6-promise

我试图在以下代码中宣传someAsyncMethod。

当我运行代码时,someAsyncMethod的产生的承诺永远不会被解决。

有人能告诉我我做错了吗?

'use strict';
var someapi = require('./lib/absenceio');
var Promise = require('bluebird');

class CompanyController {
    constructor(currentUser, parameters) {

    }
    * someAsyncMethod () {      
        return yield someapi.listReasons(); // returns a promise
    }
}

Promise.coroutine(function*(){
    var c = new CompanyController();
    Promise.promisifyAll(c);    
    var res = yield c.someAsyncMethodAsync();
    console.log('never reached');
})();

1 个答案:

答案 0 :(得分:1)

someAsyncMethod()是一个生成器函数,您无法直接屈服,但您可以使用yield*委托给它。

所以,你的代码变成了这个:

var res = yield* c.someAsyncMethod();

无需宣传它(我甚至不确定Bluebird在被要求宣传发电机功能时会做什么)。