我试图在以下代码中宣传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');
})();
答案 0 :(得分:1)
someAsyncMethod()
是一个生成器函数,您无法直接屈服,但您可以使用yield*
委托给它。
所以,你的代码变成了这个:
var res = yield* c.someAsyncMethod();
无需宣传它(我甚至不确定Bluebird在被要求宣传发电机功能时会做什么)。