たとえば、データベースからのデータを処理して特定の配列に書き込む複雑なサイクルの後、配列からのデータを処理する必要があります。何が起こるかというと、マイニング サイクル (配列への入力) を待たずに、配列処理の関数がトリガーされます。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');
}
私の悪い英語でごめんなさい!