Javascript 将参数传递给生成器函数
在过去的几个小时里,我一直在做这件事 如何将参数传递给生成器函数?Javascript 将参数传递给生成器函数,javascript,node.js,ecmascript-6,generator,bluebird,Javascript,Node.js,Ecmascript 6,Generator,Bluebird,在过去的几个小时里,我一直在做这件事 如何将参数传递给生成器函数? 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??
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());
});
如果我这样做:
let bar = yield Promise.coroutine(getFoo(5));
我得到以下错误(同样是自解释错误,但也不能解释参数传递):
我相信你想要的是:
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());
});
你需要明白什么能起作用。它接受一个生成器并返回一个函数,该函数返回一个承诺
正如您在第一种情况中所看到的(yield Promise.coroutine(getFoo);
),您正在生成Promise.coroutine
的结果,它是一个函数,而不是一个承诺,这会导致错误:
A value [object Promise] was yielded that could not be treated as a promise
在第二种情况下(yield Promise.coroutine(getFoo(5));
),您只是在启动生成器getFoo(5)
返回一个“generator”对象,但Promise。coroutine
需要一个“generator函数”,这导致:generatorFunction必须是一个函数
事实上,bluebird将Promise.coroutine的结果显示为[object Promise]
,这造成了很大的混乱,因为Promise.coroutine应该返回一个函数,但我无法理解。我想你可以问另一个问题。我可能误解了上下文,但你不能只做产生承诺。协同程序(getFoo.bind(null,5))
?@LINKIWI-nope,我得到的第一个错误是产生了一个值[对象承诺]…是的,最近才发现。没想到会这么简单。嗯,我想这是因为蓝鸟希望在yield
关键字旁边有一个Promise
(正如你所看到的,我已经将我的testRouter
包装成Promise.coroutine
)
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());
});
A value [object Promise] was yielded that could not be treated as a promise