【发布时间】:2017-12-18 04:44:35
【问题描述】:
我正在使用 forEach 循环创建两个承诺数组。我需要在第二个请求开始之前完全完成第一个请求。然而,当我检查我的日志时,我发现“第一条”和“第二条”消息没有以正确的顺序出现,即使我认为我配置了承诺,以便它们会出现。帮我弄清楚我做错了什么?
谢谢。
function saveInstance(){
return new Promise((resolve,reject)=>{
var saveInstances = [];
dateStarts.forEach(dateStart=>{
var trimmedDate = siteBody.substr(dateStart+dateNeedle.length, 400).trim();
var trimmedDateArray = trimmedDate.split(',');
var instanceId = trimmedDateArray[0].substr(7,6);
titleRecords.findOne({"titleByDate.instanceId": instanceId}, function(err,data){
if (err) throw err;
if (!data & trimmedDateTime !=null){
var instancerecord = new titleRecords();
instancerecord.titleByDate.instanceId = instanceId;
instancerecord.newTitle = 1;
saveInstances.push(instancerecord.save(function(err,data){
console.log('This should print first');
err ? reject(): resolve();
}));
}
})
})
Promise.all(saveInstances).then(updateInstanceTime,reject);
})
}
function updateInstanceTime(){
return new Promise((resolve,reject)=>{
var updateInstanceTimes = [];
dateStarts.forEach(dateStart=>{
var trimmedDate = siteBody.substr(dateStart+dateNeedle.length, 400).trim();
var trimmedDateArray = trimmedDate.split(',');
var titleTitle = trimmedDateArray[1].substr(2, trimmedDateArray[1].trim().length-2);
var instanceId = trimmedDateArray[0].substr(7,6);
var conditions = {'titleByDate.instanceId' : instanceId};
var update = {'titleByDate.lastSeen': localISOTime };
updateInstanceTimes.push(titleRecords.update(conditions, update,function(err,data){
console.log('This should print second');
(err) ? reject() : resolve();
}));
})
Promise.all(updateInstanceTimes).then(resolve,reject);
})
}
saveInstance();
【问题讨论】:
标签: javascript node.js mongodb mongoose promise