将parameter passing给生成器函数

在过去的几个小时里,我一直坚持这样做。

如何将parameter passing给生成器函数?

function* getFoo(foo) { return yield Promise.resolve(foo + 10); } exports.testRoute = Promise.coroutine(function* (req, res) { let bar = yield Promise.coroutine(getFoo); // <--- how to pass argument?? res.send(bar.toString()); }); 

当前代码抛出错误 (我知道它指向我在这里,但它没有说任何关于parameter passing):

 Unhandled rejection TypeError: A value [object Promise] was yielded that could not be treated as a promise See http:// goo.gl/4Y4pDk From coroutine: at Function.module.exports.Promise.coroutine (d:\Workspace\Github\API-NodeJS\app\node_modules\bluebird\js\main\generators.js:111:17) 

如果我这样做:

 let bar = yield Promise.coroutine(getFoo(5)); 

我得到以下错误(再次自我解释错误,但此链接并不解释通过任何传递的参数):

 Unhandled rejection TypeError: generatorFunction must be a function See http:// goo.gl/6Vqhm0 at Function.module.exports.Promise.coroutine (d:\Workspace\Github\API-NodeJS\app\node_modules\bluebird\js\main\generators.js:107:15) 

我相信你想要的是这样的:

 function* getFoo(foo) { return yield Promise.resolve(foo + 10); } exports.testRoute = Promise.coroutine(function* (req, res) { let bar = yield Promise.coroutine(getFoo)(50); res.send(bar.toString()); }); 

你需要了解Promise.coroutine做什么。 它需要一个生成器,并返回一个函数返回一个承诺。

正如你在第一种情况( yield Promise.coroutine(getFoo); )中看到的那样,你正在产生Promise.coroutine的结果,这是一个函数而不是一个promise,这会导致错误:

 A value [object Promise] was yielded that could not be treated as a promise 

在第二种情况下( yield Promise.coroutine(getFoo(5)); ),你只是启动你的生成器。 getFoo(5)返回一个“生成器”对象,但Promise.coroutine一个“生成器函数”,其结果是: generatorFunction must be a function

事实上蓝鸟显示了Promise.coroutine的结果,因为Promise.coroutine应该返回一个函数,但我无法弄清楚。 我想你可以问这是另一个问题。