Javascript 在承诺链节点中传递数据

Javascript 在承诺链节点中传递数据,javascript,node.js,promise,Javascript,Node.js,Promise,我有一系列承诺,第一个从API获取数据,第二个将数据插入数据库 我正在尝试将数据从第一个承诺传递到第二个承诺,但它是未定义的 这是我的密码: var getBalancePromise=function(){ var承诺=新承诺(功能(解决、拒绝){ poloniexchange.getBalance({ 账户:“全部” },函数(错误,响应){ 如果(错误) 控制台日志(err); 拒绝(错误); 如果(!err) resolve(response);//response是一个数组 });

我有一系列承诺,第一个从API获取数据,第二个将数据插入数据库

我正在尝试将数据从第一个承诺传递到第二个承诺,但它是未定义的

这是我的密码:

var getBalancePromise=function(){
var承诺=新承诺(功能(解决、拒绝){
poloniexchange.getBalance({
账户:“全部”
},函数(错误,响应){
如果(错误)
控制台日志(err);
拒绝(错误);
如果(!err)
resolve(response);//response是一个数组
});
}).catch((错误)=>{
console.log('error');
})
回报承诺;
};
var updateBalancePromise=函数(balanceArray)//balanceArray未定义。这应该是链中第一个承诺的数据。
{
var承诺=新承诺(功能(解决、拒绝){
balanceArray.data.forEach(函数(元素){
db.集合(“余额”).更新({
货币:element.currency
}, {
$set:{
金额:element.amount,
shortname:element.shortname
}
}, {
厄普塞特:是的
});
});
决心(正确);
log('余额更新到数据库');
});
回报承诺;
};
getBalancePromise()

.然后(更新承诺)您总是拒绝承诺:

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
未定义的

首先,确保只有在出现错误时才拒绝承诺:

if (err) {
  console.log(err);
  reject(err);
}
其次,要么在
.catch
回调中重新显示错误,要么将其完全删除并在顶层捕获:

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

您总是拒绝承诺:

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
未定义的

首先,确保只有在出现错误时才拒绝承诺:

if (err) {
  console.log(err);
  reject(err);
}
其次,要么在
.catch
回调中重新显示错误,要么将其完全删除并在顶层捕获:

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

您能否维护一个全局变量,并更新承诺成功的数据。稍后在调用第二个promise时,使用该变量。这对你有用吗?你能维护一个全局变量,并更新承诺成功的数据吗。稍后在调用第二个promise时,使用该变量。这对你有用吗?这就是为什么通常最好只为Curly牺牲两次击键作为默认值;这就是为什么你应该总是用
{}
-来包装if语句,以避免难以检测的bug。是的,从现在起我肯定会使用括号。非常感谢。这就是为什么通常最好是牺牲两次击键作为默认值;这就是为什么你应该总是用
{}
-来包装if语句,以避免难以检测的bug。是的,从现在起我肯定会使用括号。非常感谢。