【问题标题】:Mongoose findOne scope doubts [duplicate]Mongoose findOne 范围疑问[重复]
【发布时间】:2014-11-25 08:27:50
【问题描述】:

我是这个 javascript 的新手,我对 mongoose 的“查找”范围有一些疑问。

我写了下面的代码来试图理解这个问题。

下面的代码搜索购物集合,然后搜索分配给此购物的商店。

storeMap 是 storeId => storeObject 的 hashmap,但是当 Store.findOne 范围结束时,storeMap 似乎回滚到一个空数组...

 var storeMap = {};
 Shopping.findOne({ name: shoppingName }, function(err, shopping){
                    shopping.stores.forEach(function(storeId) {
                            Store.findOne({_id: storeId}, function(err, store) {
                                    if(err) console.log(err);
                                    console.log(store); //prints out store data
                                    storeMap[storeId] = store;
                                    console.log(storeMap); //prints out store data
                            });
                            console.log(storeMap); //prints out an empty array
                    });
            });

那么,为什么我的 storeMap 数组打印的是空数组而不是 store 数组?

【问题讨论】:

    标签: javascript arrays node.js mongodb mongoose


    【解决方案1】:

    Store.findOne,就像 node.js 中的许多东西一样,是异步的,需要一个callback。您的回调是设置 storeMap 的位置:

    function(err, store) {
        if(err) console.log(err);
        console.log(store); //prints out store data
        storeMap[storeId] = store;
        console.log(storeMap); //prints out store data
    }
    

    这只会在Store.findOne 完成工作后运行,这可能需要很长时间。

    以下行,console.log(storeMap); 会立即执行,但是——在回调运行之前。因此,storeMap 仍然是空的。

    我建议查看 node.js 中回调模式的一些示例/解释,这是理解的基础。

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 2018-10-27
      • 2015-10-26
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多