2014-10-04 78 views
2

我想用的MongoDB和貓鼬使用KOA用下面的代碼:回調數據出貓鼬查詢

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); 
}); 

函數本身的工作原理。這意味着,數據打印在控制檯上,但我不知道如何從功能中獲取數據,以便與它們一起工作。什麼是最好的方法來做到這一點?

回答

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); 
}); 
+0

感謝您的回答。它幫助了很多。使用exec()函數,它工作。 :) – teawithfruit 2014-10-05 20:13:13

+0

另外。我唯一需要做的就是將「this.body = yield getMessage(this.params)」一行編輯爲「this.body = yield getMessage(this.params).next();」。用「next()」顯示數據。 – teawithfruit 2014-10-05 20:20:05

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/瞭解更多關於你可以產出的信息。