簡體   English   中英

在Promise鏈Node.js中傳遞數據

[英]Passing data in promise chain nodejs

我有一個承諾,第一個承諾從API獲取數據,第二個承諾將數據插入數據庫。

我正在嘗試將數據從第一個承諾傳遞到第二個承諾,但它是作為未定義傳遞的。

這是我的代碼:

 var getBalancePromise = function() { var promise = new Promise(function(resolve, reject) { poloniexExchange.getBalance({ account: 'all' }, function(err, response) { if (err) console.log(err); reject(err); if (!err) resolve(response); //response is an array }); }).catch((err) => { console.log('error'); }) return promise; }; var updateBalancePromise = function(balanceArray) //balanceArray undefined. This should be the data from the first promise in the chain. { var promise = new Promise(function(resolve, reject) { balanceArray.data.forEach(function(element) { db.collection('balances').update({ currency: element.currency }, { $set: { amount: element.amount, shortname: element.shortName } }, { upsert: true }); }); resolve(true); console.log('balances updated into database'); }); return promise; }; getBalancePromise() .then(updateBalancePromise); 

如何更改代碼以將數據從第一個承諾傳遞到第二個承諾?

您總是reject兌現承諾:

if (err)
  console.log(err);
reject(err); // This line is always executed
if (!err)
  resolve(response); //response is an array

這會導致觸發.catch回調( .catch((err) => { console.log('error'); }) ),該balanceArray不返回任何內容,因此balanceArrayundefined

首先確保只有在出現錯誤時才拒絕承諾:

if (err) {
  console.log(err);
  reject(err);
}

其次,可以將錯誤重新拋出.catch回調中,或者將其完全刪除並在頂級捕獲:

getBalancePromise()
  .then(updateBalancePromise)
  .catch(...);

暫無
暫無

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

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