2

Koa.js を使用して単純な REST API を構築しようとしています。これは ES6 ジェネレーター関数を使用しますが、これはコールバックよりもはるかに快適です (C# の async-await に似ています)。yield キーワードは、thenable (promise、thunk、generator) を想定しています。Bluebird の promisifyAll メソッドを使用してコールバック ライブラリ (私の場合は要求) を約束していますが、それでもエラーが発生し続けます。ここに私のコードとエラーがあります:

var koa = require('koa')
, route = require('koa-route')
, app = module.exports = koa()
, Promise = require('bluebird')
, request = Promise.promisifyAll(require('request'));

app.use(route.get('/users', list));

function *list() {
  var res = yield request.get('http://backbonejs-beginner.herokuapp.com/users');
  this.body = res.body;
}

app.listen(3000);

エラーのスタック トレース:

Error: yield a function, promise, generator, array, or object
    at next (/Users/jashua/Desktop/node_modules/koa/node_modules/co/index.js:109:12)
    at Object.<anonymous> (/Users/jashua/Desktop/node_modules/koa/node_modules/co/index.js:50:5)
    at next (/Users/jashua/Desktop/node_modules/koa/node_modules/co/index.js:93:21)
    at Object.<anonymous> (/Users/jashua/Desktop/node_modules/koa/node_modules/co/index.js:50:5)
    at Server.<anonymous> (/Users/jashua/Desktop/node_modules/koa/lib/application.js:121:8)
    at Server.EventEmitter.emit (events.js:107:17)
    at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:504:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
    at Socket.socketOnData (_http_server.js:357:22)
    at Socket.EventEmitter.emit (events.js:104:17)

私は何が欠けていますか?

4

1 に答える 1

3

Bluebird は、AsyncpromisifyAll を使用して約束された関数にサフィックスを追加します。

試す:

  var res = yield request.getAsync('http://backbonejs-beginner.herokuapp.com/users');
于 2014-04-12T21:47:33.320 に答える