0

私はこのコードを持っています。データベース内のすべてのユーザーをループして、各ユーザーのポートフォリオのリストを取得します (これは、株式のコレクションです)。

 calculatePortfolios: function(callback) {
    var thisuser;
    module.exports.getAllUsers(function(err, users) {
      /* Loop through all users with i */
      for(var i = 0; i < users.length; i++) {
         console.log('i = ' + i);
         console.log(users.length);
         thisuser = users[i]; // Store current user.

         /* Loop through all held stocks in current user's portfolio. */
         module.exports.getPortfolio(thisuser.username, function(err, portfolio) {
            for(var x = 0; x < portfolio.length; x++) {
               console.log('x = ' + x);
               var total = parseFloat((portfolio[x].held * portfolio[x].unitprice) +  thisuser.cash);
               console.log(total);
               console.log(thisuser.username);
               module.exports.updateInvestor(thisuser.username, total, function(err, result) {
                   console.log(thisuser.username + ' ' + total);
               });
           }
      });
     }
     callback(err, 'OK');
  });
},

私が得た結果は、すべての i インデックス (ユーザー) がすべての x インデックス (ポートフォリオ) の前にループされるということです。x は i の内部ループであってはなりませんか?

これは Node.JS の仕組みに関係していますか?

どんな助けでも大歓迎です。ありがとうございました。

4

3 に答える 3

1

getPortfolio() は非同期操作である可能性が最も高く、内部実装に応じて、呼び出しをキューに入れるか、たとえば時間がかかる可能性のある http 要求に変換する場合があります。これらの要求が完了すると、x で動作するコールバック関数のみが完了します。が呼び出されます。しかし、その間に getPortfoli() 呼び出しが返されます。それがまさに、すべての i を高速に反復し、コールバックが呼び出され始める理由です。

于 2013-09-11T15:52:42.603 に答える