簡體   English   中英

Node.JS追加數組並轉換為JSON

[英]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.getBalanceclient.getAddressesByAccount調用(幾乎肯定)不是同步的。

for循環完成時, client.getBalanceclient.getAddressesByAccount操作仍在進行中,因此它們還沒有機會填充addresses 因此,當它傳遞到模板系統時為空。

您可能想要使用asyncmap方法之類的方法來代替它。 看起來像這樣:

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM