从联合包装函数传递给另一个函数的参数正在丢失



我使用的是最新的协同模块(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
}

为什么我要"放松"参数?

函数co立即执行具有async/await语义的给定生成器函数。如果您只是从Koa中间件中使用它,那么您不需要用co包装createIt函数,或者您只需要使用co.wrap将生成器变成一个返回promise(延迟promise)的函数。检查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
  }
}

services.js

const co = require('co')
createIt: function * (obj) {
  console.log(obj)
}
// OR
createIt: co.wrap(function *(obj) {
  console.log(obj);
});

最新更新