2013-06-27 3 views
0

У меня есть нижеследующее, которое выполняет несколько функций для захвата разных данных, и я пытаюсь создать/добавить к массиву, чтобы «создать» новый массив, который я могу затем JSON.stringify и перейти к представлению Jade, мне кажется, что я могу получить только переменную «k» из двух циклов, которые она делает, и выводит как «coin1coin2» с «» вместо массива JSON с балансом и адресами (кратные) после каждое имя монеты.Node.JS Добавить массив и преобразовать в 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, чтобы показать полный массив, так что я могу по крайней мере, посмотреть, что я получаю до создания логики в целях петли через него.

ответ

0

Проблема заключается в том, что ваш цикл for является синхронным, тогда как ваши звонки client.getBalance и client.getAddressesByAccount (почти наверняка) нет.

Когда заканчивается ваш for цикл, ваши client.getBalance и client.getAddressesByAccount операции все еще продолжается, так что они не имели возможности заселить свой addresses вещь еще. Таким образом, он пуст, когда он передается в систему шаблонов.

Возможно, вы захотите использовать что-то наподобие's map 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: ...} объектов. Я не уверен, чего вы ожидали от этого, поскольку в какой-то момент вы относитесь к ней как к строке, тогда вы относитесь к ней как к объекту.