簡體   English   中英

如何等待Moongose完成查詢?

[英]How to wait for moongose to finish query?

router.post('/logout', function(req, res) {
    if(req.body.newList){
    var aux= JSON.parse(req.body.newList); 
    var aux1;
    var i=0;
    while(i<aux.length){
        aux1=aux[i];
        Task.findOne({username:aux1.username,text:aux1.text},function(err,res){
            if(res){
                i++;
            }else{
                task= new Task({username:aux1.username,text:aux1.text,state:aux1.state});
                task.save(function(err){
                    i++;
                });
            }
        });
    }
}

好吧,到目前為止,我已經知道了。 aux存儲了一個json對象數組,它們沒有_id ,所以..我需要遍歷它們,並在需要時逐個保存。 問題是(我認為)是異步的,因為此代碼僅在數據庫中將數組的最后一個元素保存n次,即應保存的n個不同元素的數量**(請參見示例)。 因此,我認為moonggose查詢的異步行為讓我頭疼。 可能保持迭代以等待查詢結果,然后保存數組的最后一個值。

**例如,如果我有這些值用於保存[{username:'x',text:'a'},{username:'x',text:'aa'},{username:'x',text:'aaa'}] ..

它保存[{username:'x',text:'aaa'},{username:'x',text:'aaa'},{username:'x',text:'aaa'}]

我曾嘗試使用諾言,但沒有成功。。可能是錯誤地使用了諾言

對於這種情況,我更喜歡使用caolan的異步庫。 只需做:

npm install async添加模塊。

然后將代碼替換為:

router.post('/logout', function(req, res) {
    if (req.body.newList) {
        var aux = JSON.parse(req.body.newList);
        var async = require("async");
        async.each(aux, function(aux1, callback) {

            Task.findOne({
                username: aux1.username,
                text: aux1.text
            }, function(err, res) {
                if (res) {
                    callback();
                } else {
                    task = new Task({
                        username: aux1.username,
                        text: aux1.text,
                        state: aux1.state
                    });
                    task.save(function(err) {
                        callback();
                    });
                }
            });
        }, function(err) {
            // if any of the query processing produced an error, err would equal that error
            if (err) {
                // One of the iterations produced an error.
                // All processing will now stop.
                console.log('A query failed to process');
            } else {
                console.log('All queries have been processed successfully');
                //do other things here
            }
        });
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM