私はいくつかの動的クエリを順次実行しようとしていますが、何らかの理由で次のコードがその目的の動作を満たしていません。mongoose sequential promises
var createEvent = function (user, notification) {
var action, query;
query = { agent: notification.agent, story: notification.story, type: notification.type };
action = { agent: notification.agent, story: notification.story, type: notification.type, ts: notification.ts };
return mongoose.model('Event').findOne(query).exec()
.then(function (response) {
if (response === null) {
return mongoose.model('Event').create(action)
.then(function (response) {
return mongoose.model('User').findByIdAndUpdate(user, { $push: { notifications: { _id: response._id }}});
});
}
return mongoose.model('User').findByIdAndUpdate(user, { $push: { notifications: { _id: notification._id }}}).exec();
});
setTimeout(resolve, 3000);
};
var moveNotifications = function (users) {
var promises = [];
users.map(function (user) {
if (user.notifications.length > 0) {
user.notifications.map(function (notification) {
promises.push(createEvent(user._id, notification));
});
}
});
Promise.each(promises, function (queue_item) {
return queue_item();
});
};
誰かが私を助けてくれますか?ネストされたArray#map
ループの内部createEvent
を呼び出していると
カップル... 'のsetTimeout(決意、3000);' 'return'の後にあるので実行されることはありません - しかし、それだけでも' resolve'はとにかく定義されていません。第2に、あなたは.mapコールバックで 'createEvent'を呼び出します - そのため、それらのすべての' findOne'呼び出しは、最初の.thenが呼び出される前に「飛行中」です。 –