我有一个从数据库中获取数据的函数:
recentItems = function () {
Items.find({item_published: true}).exec(function(err,item){
if(!err)
return item
});
};
我希望能像这样使用它:
var x = recentItems();
但是由于recentItems
的异步特性,这种方法会返回未定义的值。我知道我可以改变我的函数并使用回调,像这样:
recentItems = function (callback) {
Items.find({item_published: true}).exec(function(err,item){
if(!err)
callback(item)
});
};
并且:
recentItems(function(result){
var x = result;
});
但我不想使用这种方法,因为我的情况是这样的。我有一个函数应该执行两个操作,将结果推送到一个数组中,并在它们之后触发回调并返回值:
var calc = function(callback){
var arr = [];
var b = getValues();
arr.push(b);
recentItems(function(result){
var x = result;
arr.push(x);
});
callback(arr);
};
在这种情况下,将
b
的值推送到arr
中并调用主回调函数,然后由于recentItems
的异步行为,获取x
的值。但我需要这两个操作依次运行且一个接一个地运行。在计算完所有内容之后,最后一行再运行并调用回调函数。如何解决这个问题?我了解了
Promises
和Async
库,但我不知道哪一个是我的答案。我能用原始的Node.js来解决吗?如果可以的话,我宁愿使用它。
duplicate
标志,因为NodeJS 4.0.0非常新,今天有新的方法可以实现OP想要的功能。 - Buzinas