[英]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
不返回任何內容,因此balanceArray
是undefined
。
首先確保只有在出現錯誤時才拒絕承諾:
if (err) {
console.log(err);
reject(err);
}
其次,可以將錯誤重新拋出.catch
回調中,或者將其完全刪除並在頂級捕獲:
getBalancePromise()
.then(updateBalancePromise)
.catch(...);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.