松散从共同包装函数传递给另一个函数的参数

时间:2016-07-31 23:16:50

标签: javascript node.js koa co

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

为什么我"松散"参数?

1 个答案:

答案 0 :(得分: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
  }
}

services.js

const co = require('co')

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

// OR

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