gpt4 book ai didi

javascript - 不分阶段工作。正常吗?

转载 作者:行者123 更新时间:2023-11-30 17:58:26 24 4
gpt4 key购买 nike

例如,经过一个复杂的循环,从数据库中处理数据并写入某个数组,我需要处理数组中的数据。发生的情况是,没有等待挖矿周期(填充数组)就触发了数组处理的功能。一切都必须通过setTimeout()来完成;这正常吗?

checkDialog: function (data, callback) {
var interlocutorsArray = JSON.parse(data);
var dialogsId = {};
mongoclient.open(function (err, cursor) {

var db = cursor.db('messages');
var dialogsDb = db.collection('dialog');
interlocutorsArray.forEach(function (item, index) {
dialogsDb.find({
owner: item.owner_user_id,
viewer: item.viewer_user_id
}, function (err, cursor) {
cursor.count(function (err, count) {
if (count === 0) {
dialogsDb.insert({
owner: item.owner_user_id,
viewer: item.viewer_user_id
}, function (err, inserting) {
dialogsId[inserting[0]._id] = {
owner: item.owner_user_id,
viewer: item.viewer_user_id
};
});
} else {
cursor.each(function (err, item) {
if (item !== null) {
dialogsId[item._id] = {
owner: item.owner,
viewer: item.viewer
};
}
});
}
});
});
});
});

setTimeout((function () {
callback(dialogsId);
}), 150);

console.log('after callback');

}

抱歉我的英语不好!

最佳答案

首先,我建议您从当前的 mongodb 模块切换到更舒适的模块,例如:

我将在示例中使用 monk,因为它可以很容易地适应任何 mongodb 模块,包括 native mongodb node driver .

至于你的问题,你可以用异步控制流管理的任何模块来解决,例如:

下面是使用 async.js 解决问题的示例:

checkDialog: function (data, callback) {
var db = require('monk')('localhost/messages');
var dialogsDb = db.get('dialog');
var interlocutorsArray = JSON.parse(data);

async.concat(interlocutorsArray, function (item, next) {
var query = {
owner: item.owner_user_id
viewer: item.viewer_user_id
};
dialogsDb.find(query, function (err, docs) {
if (err) return next(err);
if (docs && docs.length > 0) {
next(null, docs);
} else {
dialogsDb.insert(query, function (err, inserting) {
next(err, [inserting]);
})
}
})
}, function (err, items) {
if (err) throw err; // it's best to handle errors without throwing them
var dialogsId = {};
for (var item, i = 0; i < items.length; i++) {
item = items[i];
dialogsId[item._id] = {
owner: item.owner,
viewer: item.viewer
};
}
callback(dialogsId);
})
}

关于javascript - 不分阶段工作。正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17628599/

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