【发布时间】:2018-01-05 15:16:12
【问题描述】:
我是 Promise 的新手,并且在很长一段时间内都在试图弄清楚如何在使用接收数据的异步网络调用后获得正确的结果。
我从交易所收到余额并循环访问多个参数。完成后,应返回 holdings。
但是,我仍然必须与异步行为作斗争。当我运行没有注释代码的代码时,结果是[]。如果我设置了一个人为的 setTimeout,那么返回的数组holdings 是正确可见的。
谁能告诉我我的错误在哪里?我试图在 stackoverflow 上阅读 mdn 文档和类似问题,但我仍然卡住了。
非常感谢你们,
托比亚斯
const bittrex = require('node.bittrex.api');
const {key, secret} = require('./key')
let getBalance = new Promise((resolve, reject) => {
let holdings = [];
bittrex.getbalances( function( data, err ) {
if (err) {
reject(err);
}
data.result.forEach(coin => {
if (coin.Balance !== 0) {
let market = `BTC-${coin.Currency}`;
if(coin.Currency === 'BTC') market = `USDT-BTC`;
bittrex.getticker( { market : market}, function( ticker, err ) {
if (err) {
reject(err);
}
holdings.push({
Coin: coin.Currency,
Balance: coin.Balance,
Last: ticker.result.Last
});
})
}
});
});
resolve(holdings);
})
getBalance
// .then((holdings) =>{
// return new Promise((resolve, reject) => {
// setTimeout(() => {
// resolve(holdings);
// }, 10000)
// })
// })
.then((holdings) => {
console.log(holdings);
})
【问题讨论】:
-
getticker()也是异步的
标签: javascript asynchronous foreach es6-promise