如何等待Mongo查找/地图结果?

时间:2014-11-26 08:13:45

标签: javascript mongodb asynchronous meteor callback

我有以下内容,其中Posts是Meteor中的mongo集合:

//Tracker.autorun(function() {
    // only return 25 most recent metadata
    var data = Posts.find({}, {
        "limit": 25,
        "sort": {
            "date": -1
        },
        "fields": {
            "metadata": 1
        }
    }).map(function(item) {
        return item.metadata;
    });

    // Asych Race condition! data has not been filled yet. 
    React.renderComponent(new StreamAtom({ "data": data}), document.body);
//});

问题在于"数据"在React尝试呈现页面之前,尚未从Mongo返回并在Map中进行后处理。但是,我不确定如何传递" React.render"将Mongo.find()。map()作为回调。我等待从Mongo查找返回的数组结果的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

第一次运行代码时,它们将不是数据,因此您需要检查这种情况并避免渲染结果(可能会渲染加载指示符)。

收到数据后,自动运行将重新运行,您将获得数据。

通常情况下,通过在呈现页面之前使用IronRouter来“waitOn”数据来解决这类问题,但我们无法判断这是否适用于您的情况。