【问题标题】:Node.JS Append Array and Convert to JSONNode.JS 追加数组并转换为 JSON
【发布时间】:2013-06-24 19:40:35
【问题描述】:

我有下面运行一些函数来获取不同的数据,我正在尝试创建/附加到一个数组以“创建”一个新数组,然后我可以 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 以显示完整的数组,因此我至少可以在视图中创建逻辑以循环遍历它之前看到我得到了什么。

【问题讨论】:

    标签: arrays json node.js for-loop


    【解决方案1】:

    这里的问题是您的 for 循环是同步的,而您的 client.getBalanceclient.getAddressesByAccount 调用(几乎肯定)不是。

    当您的for 循环完成时,您的client.getBalanceclient.getAddressesByAccount 操作仍在进行中,因此它们还没有机会填充您的addresses 事物。因此,当它传递给模板系统时它是空的。

    您可能想使用类似asyncmap 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: ...} 对象的数组。我不确定你期望它是什么,因为有一次你把它当作一个字符串,然后你把它当作一个对象。

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 2015-08-27
      • 2021-10-17
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2013-07-14
      相关资源
      最近更新 更多