[英]Node.JS Append Array and Convert to JSON
我下面有運行一些函數以捕獲不同的數據,並且我試圖創建/追加到數組以“創建”一個新數組,然后我可以將其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
來顯示完整的數組,所以在視圖中創建邏輯來遍歷它之前,我至少可以看到我得到的東西。
這里的問題是您的for
循環是同步的,而您的client.getBalance
和client.getAddressesByAccount
調用(幾乎肯定)不是同步的。
當for
循環完成時, client.getBalance
和client.getAddressesByAccount
操作仍在進行中,因此它們還沒有機會填充addresses
。 因此,當它傳遞到模板系統時為空。
您可能想要使用async的map方法之類的方法來代替它。 看起來像這樣:
// 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: ...}
對象的數組。 我不確定您的期望是什么,因為在某一時刻您將其視為字符串,然后將其視為對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.