2013-06-27 86 views
0

我有下面的那個運行幾個函數來獲取不同的數據,我試圖創建/追加到一個數組來創建一個新的數組,然後我可以JSON.stringify並傳遞到翡翠視圖,我似乎只能得到它所做的兩個循環的「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) 
    }); 
}); 

在玉查看我只是做p= address充分展現陣列,這樣我至少可以看到什麼,我通過它的視圖循環創建邏輯之前獲得。

回答

0

這裏的問題是您的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: ...}對象的數組。我不確定你期望它是什麼,因爲在某一點上你把它當作一個字符串對待,那麼你把它當作一個對象來對待。