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 セマンティクスを使用して、指定されたジェネレーター関数をすぐに実行します。createItKoa ミドルウェアから使用するだけの場合は、関数をでラップする必要はありません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);
});
于 2016-08-05T01:59:13.637 に答える