2017-05-28 15 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の中に入れようとした。

編集: currencydataは、mongooseスキーマから返されたオブジェクトの配列です。 JavaScriptの オブジェクトプレーンにマングースの文書を変換するために

[{ 
    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

私はマングース専門家ではありません。しかし、 "obj"というマングースモデルはありませんか? '.save()'を試したことがありますか?(実際には "Thing"を保存することになっています)saveが意図されていない場合、 '.toJSON()'を使用して返されたオブジェクト(マングースモデルではありません)を変更してください。 –

+0

私はMongoDBに新しいキーペアを保存しようとしているように思えましたが、私はそうではありません。私はちょうど私のフィドルのように返された配列のデータを厳密に操作しています。 – SpringsTea

答えて

0
  • リーン使用():それはこのようになります。

  • 次に、最初のthen()の中で、 next()が戻り値を取得するように約束を返す必要があります。約束のオブジェクト内

それぞれ、約束を解決するか、拒否、呼び出されたときに、決意は、機能を拒否。 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); 
    });