2017-08-03 40 views
0

我展示了一堆從集合頁面,因此讓他們在我看來,我可以在app.js初始化的全局變量locals像這樣:當地人變量沒有更新正確

Page.find({}).sort({ sorting : 1}).exec(function(err, pages){ 
    if (err) { 
     console.log(err); 
    } else { 
     app.locals.pages = pages; 
    } 
}); 

這工作正常。不過,我也有能力對這些頁面顯示的方式進行重新排序,所以在我重新排序後,我在同一條路徑上從上面重新編號爲Page.find(),但它似乎總是落後一步。

所以,如果我重新排序的變化(我們稱之爲reorder 1),我沒有看到後app.locals.pages有差別,但如果我再次重新排序(我們稱之爲reorder 2,然後我看到了reorder 1排序,而不是reorder 2等方面始終,所以基本上它總是落後一步

從路線

相關代碼:?

for (var i = 0; i < ids.length; i++) { 
     var id = ids[i]; 
     count++; 
     (function(count) { 
      Page.findById(id, function (err, page) { 
       page.sorting = count; 
       page.save(function (err) { 
        if (err) 
         console.log(err); 
       }); 
      }); 
     })(count); 
    } 

    Page.find({}).sort({sorting: 1}).exec(function (err, pages) { // this is always a step behind 
     if (err) { 
      console.log(err); 
     } else { 
      req.app.locals.pages = pages; 
     } 
    }); 

爲什麼沒有得到最新的

+0

我沒有完全理解你的問題大聲笑。您想做什麼 ? – boubaks

+0

@boubaks在for循環運行並且數據庫中的值發生更改後,req.app.locals.pages不會反映最新的更改。 –

回答

0

奧奇,然後我明白你的問題。

問題在於比你的page.save需要更多的時間比你的for 所以你找到後會得到幾乎相同的結果比以前。

你在哪裏使用它(for)?在一個特殊的路線?

簡單異步JavaScript的問題;)

```

function sortPages(ids, callback) { 
    var total = 0; 
    for (var i = 0; i < ids.length; i++) { 
    var id = ids[i]; 
    count++; 
    (function(count) { 
     Page.findById(id, function (err, page) { 
      page.sorting = count; 
      page.save(function (err) { 
       ++total; 
       if (err) 
        console.log(err); 
       if (total >= ids.length) { 
        callback('done'); 
       } 
      }); 
     }); 
    })(count); 
    } 
} 

sortPages(ids, function() { 
    Page.find({}).sort({sorting: 1}).exec(function (err, pages) { 
     if (err) { 
      console.log(err); 
     } else { 
      req.app.locals.pages = pages; 
     } 
    }); 
}); 

```

+0

是的,在for循環中使用閉包之前,我還遇到了foor循環的問題,它沒有正確更新。這是所有在同一路線,for循環,然後page.save,對此的任何補救措施? –

+0

你必須將第一回包裝在一個獲得回調的函數中我會給你寫一個例子(你也可以使用promise,但第一次回調時更容易理解) – boubaks

+0

謝謝,這兩個例子都很棒 –