2017-05-28 83 views
0

我有這個撥弄那說明了什麼我想要做的和它的作品像預期一樣: https://jsfiddle.net/mbLwsnak/遍歷在節點從貓鼬數據

它所做的就是通過對象的數組循環,並增加了一個鍵值對。

我在我的節點應用程序中有相同的代碼,它不起作用。新對不會添加到對象中,即使代碼實際上是相同的,所以我認爲它必須是上下文。

Schema.find() 
.then(function(currencydata){ 

    var data = currencydata; 

    data.forEach(function(obj){ 
     obj.thing = "Thing"; 
    }) 

    console.log(data); 
    mdata.currencydata = data; 

}) 
.then(function(result){ 
    res.render('index', mdata); 
}) 

所以唯一的區別是我能想到的問題是,這是所有內部異步功能。我甚至嘗試將日誌放入setTimeout中,以防與async有關,但不會改變。

編輯: currencydata是貓鼬模式返回的對象數組。它看起來像這樣:

[{ 
    country: 'Canada', 
    currency: 'CAD', 
    cost: 5.98, 
    exchangerate: 1.33, 
    value: -10.9 
}, { 
    country: 'United States', 
    currency: 'USD', 
    cost: 5.06, 
    exchangerate: 1, 
    value: 0 
}, { 
    country: 'India', 
    currency: 'INR', 
    cost: 170, 
    exchangerate: 68.33, 
    value: -50.8 
}] 
+0

我不是貓鼬專家;但不是「貓鼬」貓鼬模型?你是否試過'.save()'(如果意圖是實際保存「Thing」。如果保存不是,則使用'.toJSON()'並修改返回的對象(不是貓鼬模型)。 –

+0

我剛剛意識到,它聽起來像我試圖保存一個新的密鑰對到我的MongoDB。我不是。我嚴格操縱返回數組中的數據,就像在我的小提琴中一樣。 – SpringsTea

回答

0
  • 使用瘦()的貓鼬文檔轉換成普通的JavaScript 對象。

  • 然後在第一個然後()你需要返回一個承諾,以便 next then()將得到返回的值。

裏面的承諾目的,決心拒絕函數被調用時,解決或拒絕該許諾,分別。 Promise Reference

Schema.find() 
    .lean() 
    .then((currencydata, err) => { 
     return new Promise((resolve, reject) => { 
      currencydata.forEach(data => { 
       data.thing = 'Thing'; 
      }); 
      resolve(currencydata); 
     }); 
    }) 
    .then((newdata, err) => { 
     res.render('index', newdata); 
    });