每次_rev
更改时,我都会尝试多次更新couchdb。所以我需要等到我从第一次更新获得回调。但是在收到回调之前,Node.js循环似乎在迭代。这是我的代码
function upload(req, res, next) {
if ('POST' !== req.method) return next();
rev = req.param('rev');
idAndRevData = {
id : "some_doc_id",
rev : rev
};
for (x in array){
var item = array[x];
db.saveAttachment(idAndRevData, attachmentData, function (err, reply) {
if (err) {
console.dir(err)
return
}
idAndRevData.rev = reply.rev;
callback("done");
});
}
}
我尝试使用似乎无效的async.each
async.each(array,fileupload,function(err){
if(err)thorw err;
console.log("done")
});
在这里,我可以打印“完成”的数量与array
的长度一样多,但fileupload
内的代码无法正常工作
答案 0 :(得分:0)
那样:
function upload(req, res, next) {
if ('POST' !== req.method) return next();
rev = req.param('rev');
idAndRevData = {
id : "some_doc_id",
rev : rev
};
var processData = function() {
if(array.length == 0) {
callback("done");
return;
}
var item = array.shift();
db.saveAttachment(idAndRevData, attachmentData, function (err, reply) {
if (err) {
console.dir(err)
return
}
idAndRevData.rev = reply.rev;
processData();
});
}
}
因此,只有在调用db回调时,才能逐个获取数组的元素。
答案 1 :(得分:0)
async.each
并行执行迭代器,因此请使用async.eachSeries
。这将确保请求连续执行,next仅在当前请求完成时调用。