2

我想将 koa 与 mongodb 和 mongoose 一起使用,代码如下:

var getMessage = function*(params) {
  var messages = MessageModel.find({
    to: params.to
  }, function(err, m) {
    if (err) return console.error(err);
    // How to get the data out of here to work with them?
    console.log(m);
  });

  yield messages.fields;
}

app.get('/message/to/:to', function*(next) {
  this.body =
    yield getMessage(this.params);
});

该功能本身有效。这意味着,数据打印在控制台上,但我不知道如何从函数中获取数据,以便使用它们。最好的方法是什么?

4

2 回答 2

4

您可以使用.find().exec() 没有生成器返回的承诺:

var getMessage = function (params) {
  return MessageModel.find({
    to: params.to
  }).exec();  
}

app.get('/message/to/:to', function*(next) {
  this.body = yield getMessage(this.params);
});

或在生成器中产生承诺并返回您想要的值:

var getMessage = function*(params) {
  var data = yield MessageModel.find({
    to: params.to
  }).exec();

  return data;
}

看看http://blog.stevensanderson.com/2013/12/21/experiments-with-koa-and-javascript-generators/了解更多关于你可以产出的信息。

于 2014-10-07T11:36:09.763 回答
2

免责声明:我不知道koa。

您是否尝试过兑现承诺本身?https://github.com/LearnBoost/mongoose/issues/1859

var getMessage = function*(params) {
  var mPromise = MessageModel.find({
    to: params.to
  }).exec();
  yield mPromise;    
}

app.get('/message/to/:to', function*(next) {
  this.body =
    yield getMessage(this.params);
});
于 2014-10-04T18:31:15.977 回答