我有以下运行一些函数来获取不同的数据,我试图创建/附加到一个数组“创建”一个新的数组,然后我可以JSON.stringify并传递给Jade视图,我似乎只能获得它所做的两个循环的“k”变量,并输出“coin1coin2”和“”,而不是每个硬币名称后面有余额和地址(倍数)的JSON数组。
// list all wallets //
app.get('/wallet', function(req, res){
var coins = app.get('coins');
var addresses = "";
for (var k in coins) {
addresses += k;
console.log('Coin: ' + k);
//console.log(k+' => '+coins[k]);
connect(coins[k]);
client.getBalance('44abc0a80102', 6, function(err, balance) {
if (err) return console.log(err);
addresses += balance;
//console.log('Balance: ' + balance);
});
client.getAddressesByAccount('44abc0a80102', function(err, address) {
if (err) return console.log(err);
addresses["address"] += address;
});
}
console.log(addresses);
res.render('wallet', {
title: 'Wallet',
address: JSON.stringify(addresses)
});
});
在Jade视图中,我只是在做p= address
以显示完整的数组,所以我至少可以在视图中创建逻辑之前看到我得到的内容。
答案 0 :(得分:0)
这里的问题是,您的for
循环是同步的,而您的client.getBalance
和client.getAddressesByAccount
来电几乎肯定不是。
当您的for
循环结束后,您的client.getBalance
和client.getAddressesByAccount
操作仍在进行中,因此他们还没有机会填充您的addresses
内容。因此,当它传递给模板系统时它是空的。
您可能希望使用async的map method之类的内容来代替。它看起来像这样:
// list all wallets
app.get('/wallet', function(req, res){
// array? object?
var coins = app.get('coins');
async.map(coins, function(coinId, cb) {
// ???
console.log('Coin: ' + JSON.stringify(coin));
// not sure what this does!
connect(coin);
client.getBalance('44abc0a80102', 6, function(err, balance) {
if (err) return cb(err);
client.getAddressesByAccount('44abc0a80102', function(err, address) {
if (err) return cb(err);
return cb(null, {
address: address,
balance: balance,
});
});
});
}, function(err, addresses) {
// note that we only act on an error here
if (err) {
return console.log(err);
}
// [{address: ..., balance: ...}, ...]
console.log(addresses);
res.render('wallet', {
title: 'Wallet',
address: JSON.stringify(addresses),
});
});
});
addresses
值将是{address: ..., balance: ...}
个对象的数组。我不确定你的期望是什么,因为有一点你把它当成一个字符串,然后你把它当成一个对象。