【发布时间】:2014-08-02 20:03:00
【问题描述】:
我被异步算法卡住了:
我有一系列猫鼬模型:
var allRefDatasSchemas = {
RefAllotement: mongoose.model('RefAllotement', RefDataSchema),
RefModeleConstructeur: mongoose.model('RefModeleConstructeur', RefDataSchema),
RefTypeKit: mongoose.model('RefTypeKit', RefDataSchema),
RefTypeUtilisation: mongoose.model('RefTypeUtilisation', RefDataSchema),
};
我想抓取每个集合的所有项目并将它们放入一个数组或类似的东西中。
如果我这样做,find 回调的 this 关键字不会引用当前模型,
我不可能知道属于哪个模型项目
var results = {};
for (var model in allRefDatasSchemas) {
allRefDatasSchemas[model].find(function(err, data) {
// I'd like to do something like that :
// but this.modelName is null, because it isn't the model
// on which the find is done.
results[this.modelName] = data;
// if I use "model" variable, it doesn't work, because asynchronous callback
});
}
我也尝试过async 库但没有成功,因为我总是回到同样的问题:不可能知道哪个模型在回调中执行 find 查询。
如果我使用 Promise,则在 then 中同上。
请帮助我 :) 你会怎么做呢?
编辑 model.find 调用 query.find,query.find 调用 mquery.find。在 mquery.find 中,回调被调用,在那个时候丢失了 this 引用:this._collection.find(conds, options, utils.tick(callback)); /编辑
【问题讨论】:
-
您可以编辑自己的问题以添加信息,而不是发布 cmets。我真的不明白您为什么要这样做,因为您肯定可以以不同的方式建模。但是
async系列应该适合你,除了那不是你发布的代码。 -
是的,我了解您关于建模的问题:我的目标是在主干客户端应用程序上一次加载一些 refdata(选择输入中使用的数据)(关注this pattern):)