Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Node.JS追加数组并转换为JSON_Arrays_Json_Node.js_For Loop - Fatal编程技术网

Arrays Node.JS追加数组并转换为JSON

Arrays Node.JS追加数组并转换为JSON,arrays,json,node.js,for-loop,Arrays,Json,Node.js,For Loop,我在下面运行了一些函数来获取不同的数据,我正在尝试创建/附加到一个数组来“创建”一个新的数组,然后我可以将其JSON.stringify并传递到Jade视图,我似乎只能获得它所做的两个循环中的“k”变量,并用“”输出为“coin1coin2”而不是在每个硬币名称后添加余额和地址(倍数)的JSON数组 // list all wallets // app.get('/wallet', function(req, res){ var coins = app.get('coins');

我在下面运行了一些函数来获取不同的数据,我正在尝试创建/附加到一个数组来“创建”一个新的数组,然后我可以将其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
循环完成时,您的
客户端.getBalance
客户端.getAddressesByAccount
操作仍在进行中,因此他们还没有机会填充您的
地址。因此,当它被传递到模板系统时,它是空的

您可能希望使用类似于的方式来执行此操作。看起来是这样的:

// 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:…}
对象的数组。我不确定你期望它是什么,因为在某一点上你把它当作一个字符串,然后你把它当作一个对象