0


我正在尝试多次更新 couchdb,每次_rev更改。所以我需要等到我从第一次更新中得到回调。但是在我收到回调之前,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不起作用

4

2 回答 2

0

async.each并行执行迭代器,所以使用async.eachSeries. 这将确保请求成功执行,仅在当前请求完成时才调用 next。

于 2013-08-30T11:30:29.597 回答
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 回调时才一个一个地获取数组的元素。

于 2013-08-30T11:28:23.637 回答