0

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

4

1 回答 1

0

这里的问题是您的for循环是同步的,而您的client.getBalanceandclient.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: ...}对象数组。我不确定你期望它是什么,因为有一次你把它当作一个字符串,然后你把它当作一个对象。

于 2013-06-27T10:53:19.217 回答