如何使用co与命名函数?

时间:2016-03-03 08:21:28

标签: javascript yield co

所以我试图用co包装返回promises的MongoDB方法 例如 http://mongodb.github.io/node-mongodb-native/2.0/reference/ecmascript6/crud/

我看到co被用作:

co(function*() {

这似乎是一个匿名函数。在代码的主体中很好,但有没有办法获得内部产生的值? 例如,基本上得到co例程的结果:

如果我能做到:

let wrap = co(function* (collName) {
  let res = yield collection.findOne({});
  yield res;
});

然后在其他地方

let res = wrap("Topics");

但我得到

TypeError: wrap is not a function

也试过:

co(function* wrap(collName) {

...

co.call(this, wrap("Topics"));
let wrap = co.wrap(function* (collName) { ...

但仍然没有运气。

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是co.wrap功能。

let wrap = co.wrap(function* (collName) {
  let res = yield collection.findOne({});
  yield res;
});

然后你可以按照你想要的方式使用它

let res = wrap("Topics");