我在我的节点服务器上使用async模块来遍历我的mongodb数据库中的对象,根据每个对象内的数据触发对Instagram API的请求,并增加{{1在每次迭代中,直到达到minTimestamp
。
除了一个大问题之外,下面的代码效果很好。如果我将endTimestamp
增加一个硬编码值(minTimestamp
),一切都运行良好。但是,当我更改一行代码以从最近的响应(minTimestamp += 1000
)中获取最新的created_time
时,我的循环会针对每个事件运行一次'然后停下来。我得到了正确的增加minTimestamp = images[0].created_time
登录到我的控制台,但值似乎永远不会进入下一个循环。
minTimestamp
答案 0 :(得分:1)
如果你有一个我可以看的git repo,我可以更好地调试这个,但是...那说,我看到两个明显的问题:
你的例子:
Event.findOneAndUpdate( {}, {},
function(err, model) {
console.log(err);
}
);
imageFinishedCallback();
应该变成这个:
Event.findOneAndUpdate( {}, {},
function(err, model) {
console.log(err);
imageFinishedCallback();
}
);
async.whilst
回调。您正在调用async.eachSeries,但随后会立即转到下一个循环。您的代码:
function (error, response, body) {
// ...
async.eachSeries(images, function(image, imageFinishedCallback) {/* ... */},
function(err){
// ...
});
// this works
minTimestamp += 1000;
// this does not
// minTimestamp = images[0].created_time;
if (numImages > 0) {
console.log(numImages + 'images have been processed successfully and min_timestamp has been incremented to: ' + minTimestamp);
}
requestFinishedCallback();
}
应改为:
function (error, response, body) {
// ...
async.eachSeries(images, function(image, imageFinishedCallback) {/* ... */},
function(err){
// ...
console.log(numImages + 'images have been processed successfully and min_timestamp has been incremented to: ' + minTimestamp);
minTimestamp = images[0].created_time;
requestFinishedCallback();
});
}
如果你有一个github repo来发布我可以进一步调试,但是......看起来问题来自不等待异步函数完成。