2016-04-18 74 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好,但在視圖中用戶沒有價值。爲什麼? 我認爲是與全局變量相關的東西。但我不知道 感謝

編輯

沒事所以這種方法是異步。什麼即時試圖做的就是找到了她的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 
      }); 
     }); 

    }) 
} 

};

它仍然無法正常工作? __。每個都是異步函數?

對不起,這一切也許愚蠢的問題

回答

1

對象的方法findOneUser異步運行。因此,您在findOne返回用戶對象之前正在渲染視圖。

如果您在render.view之前放置了console.log,它會在console.log內部方法之前打印輸出。

+0

對不起,我剛纔編輯的問題,具有u任何想法,爲什麼這不工作:/ –

+0

關於'_.each',我發現了另一個答案,這將有助於你更好:http://stackoverflow.com/questions/18831655/underscore-each-callback-when-finished#answer-18833980 –

1

當代碼運行時,您撥打res.view之前不會執行該功能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

findOne方法是asynchrone方法,所以它沒有provinding的res.view與適當的數據 嘗試執行包整個邏輯在同一個函數中,它可能看起來很醜,但它現在會做這件事

0

好吧..首先真的要感謝大家。我解決了這個問題。

我知道這不是正確的方式來做到這一點,但它的工作原理,所以我提議它很好。

的編輯後的問題是,在視圖中我試圖寫有參數的對象,但我已經被髮送了的載體中,改變這一行向量:

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

我可以送對象的矢量。

所以..反正後來的感謝,因爲我會改變我的代碼做的更好,高效

這是我的第一篇很抱歉不讀的如何使用此哈哈,因爲我覺得我有第一個步驟已經犯了很多錯誤。

很遺憾,我的英語:C