0

我正在使用最新的协同模块(4.6)。

这是一个 Koa 中间件。因此它已经被co()包裹了。

create: function * () {
  try {
    this.body = yield services.createIt({obj: true})
  } catch (err) {
    this.body = { "errors": err.details }
    this.status = err.status
  }
}

它正在调用我手动包装的另一个生成器函数co

const co = require('co')

createIt: co(function * (obj) {
  console.log(obj) // --> undefined
}

为什么我“松开”参数?

4

1 回答 1

1

该函数co立即使用 async/await 语义执行给定的生成器函数。如果你只是从 Koa 中间件中使用它,你不需要用 包装createIt函数co,或者你可以只使用co.wrap将生成器变成一个返回承诺(延迟承诺)的函数。检查https://github.com/tj/co/blob/master/index.js#L26

create: function * () {
  try {
    this.body = yield services.createIt({obj: true})
  } catch (err) {
    this.body = { "errors": err.details }
    this.status = err.status
  }
}

服务.js

const co = require('co')

createIt: function * (obj) {
  console.log(obj)
}

// OR

createIt: co.wrap(function *(obj) {
  console.log(obj);
});
于 2016-08-05T01:59:13.637 回答