chu*_*Dub 0 javascript node.js promise
我有一系列承诺,第一个从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);Run Code Online (Sandbox Code Playgroud)
如何更改我的代码以将数据从第一个承诺传递到第二个承诺?
你总是reject承诺:
if (err)
console.log(err);
reject(err); // This line is always executed
if (!err)
resolve(response); //response is an array
Run Code Online (Sandbox Code Playgroud)
这会导致.catch回调被触发(.catch((err) => { console.log('error'); })),它不会返回任何内容,因此balanceArray也是如此undefined.
首先确保在出现错误时拒绝承诺:
if (err) {
console.log(err);
reject(err);
}
Run Code Online (Sandbox Code Playgroud)
其次,要么重新抛出.catch回调中的错误,要么将其完全删除,然后赶上顶层:
getBalancePromise()
.then(updateBalancePromise)
.catch(...);
Run Code Online (Sandbox Code Playgroud)