gpt4 book ai didi

javascript - Mongoose findOne范围疑惑

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:10 24 4
gpt4 key购买 nike

我对 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.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 中回调模式的一些示例/解释,这是理解的基础。

关于javascript - Mongoose findOne范围疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26125424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com