2016-04-18 10 views
0

上のコードは、このNodejs可変印刷コンソールではなく、図

module.exports = { 
index: function (req, res, next) { 
    //get an array of all users in user collection 
    Notification.find(function foundNotification(err, notifications) { 
     if (err) return next(err); 
     var elusuario=[]; 
     User.findOne(2, function foundUser (err, user) { 
      if (err) return next(err); 
      if (!user) return next(); 
      console.log(user); 
      console.log("----------------------------"); 
      elusuario = user; 
      console.log(elusuario); 
     }); 
     res.view({ 
      notifications: notifications, 
      elusuario: elusuario 
     }); 
    }) 

} 

}です。

これはコントローラであり、コンソールではelusuarioが正常に表示されますが、ビューではユーザーに値がありません。どうして? 私は何かがグローバル変数に関連していると思います。しかし、私は方法が非同期であるので 感謝

EDIT

はすべての権利を知りません。何をしようとしているイムは、彼女のuser.idによって通知やユーザーを見つけて、私がしなければだから何user.nameを取得しているこの

module.exports = { 
index: function (req, res, next) { 

    //get an array of all users in user collection 
    Notification.find(function foundNotification(err, notifications) { 
     if (err) return next(err); 

     User.find(function foundUser (err, users) { 
      if (err) return next(err); 
      var usuarios_locotes = []; 
      _.each(notifications, function (notification) { 

       _.each(users, function (user) { 
        if(notification.token_user==user.token){ 
         console.log(user.token); 
         usuarios_locotes.push(user); 
         console.log(usuarios_locotes); 
        }; 
       }); 
      }); 

      res.view({ 
       notifications: notifications, 
       users: usuarios_locotes 
      }); 
     }); 

    }) 
} 

};

まだ動作していませんか? __。それぞれは非同期機能ですか?あなたがres.viewを呼び出す前に

すべてこの多分愚かな質問

答えて

1

findOneUserオブジェクトは非同期に実行されます。このため、findOneがユーザーオブジェクトを返す前にビューをレンダリングしています。

あなたがrender.viewconsole.logを入れた場合、それはconsole.logインナーfindOne方法の前に出力を印刷します。

+0

申し訳ありませんが、私はこれが動作しない理由を任意のアイデアをuのを持って、質問を編集しました: '_.each'について/ –

+0

、私は助ける別の答えを見つけましたあなたより良い:http://stackoverflow.com/questions/18831655/underscore-each-callback-when-finished#answer-18833980 –

1

コードが実行されているため申し訳ありませんが、機能foundNotificationは実行されません。私のアドバイスは約束です。

あなたが仕事に以下のようにコードを変更することができます。

function (req, res, next) { 
    //get an array of all users in user collection 
    Notification.find(function foundNotification(err, notifications) { 
     if (err) return next(err); 
     var elusuario=[]; 
     User.findOne(2, function foundUser (err, user) { 
      if (err) return next(err); 
      if (!user) return next(); 
      console.log(user); 
      console.log("----------------------------"); 
      elusuario = user; 
      console.log(elusuario); 
      res.view({ 
       notifications: notifications, 
       elusuario: elusuario 
      }); 
     }); 

    }); 
} 
0

それが適切なデータでres.viewをprovindingせずに実行していますので、 ラップしようfindOne方法は、asynchrone方法であります同じ機能の全体のロジック、それは醜く見えるかもしれませんが、今のところそれを行うでしょう

0

すべての権利は..最初に本当に皆様に感謝します。私はこのくそを解決する。

これは正しい方法ではありませんが、うまくいくことはわかっています。私の提案では問題ありません。 EDIT後

問題は、ビューで、私はパラメータを持つオブジェクトを記述しようとしているということでしたが、私が送信されたきたことは、ベクターはので、この行を変更するのベクターであった:

usuarios_locotes.push(new Object(users[h])); 

私は送ることができますオブジェクトのベクトル

..だからとにかくおかげで、後に、私はより良いそれを行うには、私のコードを変更します原因と効率的な

これは私が持っていると思う。このハハの原因を使用する方法の最初のステップを読んでいないために私の最初のポストので、申し訳ありませんでした多くの間違いを犯している。

そして、私の英語のため申し訳ありません:C

関連する問題