2017-10-12 4 views
0
app.get('/indexInstHome.html', 
    require('connect-ensure-login').ensureLoggedIn('indexErrorAccount.html'), 
    function(req, res, cb) 
     { 
     test.find({selector:{"Class.email": req.user._id }}, function(er, 
     result, cb) { 
        if (er) { 
         console.log(er); 
        } 
        hello = result.docs; 
        return cb(hello); 
      }); 
    hello = cb(); 
    console.log(hello); 
    res.render('indexInstHome.html', { user: req.user, Classes: hello }); 
}); 

答えて

0

私はtest.findが何をしているのかわかりませんが、私はそれが何らかの非同期DBクエリであると仮定しています。私は第3引数(コールバック)が使われるのかどうかはわかりませんが、あなたがしようとしていることには必要ではないと思います。

Expressコールバックにはnextという名前を使用することをお勧めします。そのコンベンションはかなり普遍的ですから、cbと呼び始めると他の人を混乱させるだけです。

コードの主な問題は、コールバックが非同期コードでどのように機能するかについての誤解のようです。作成するよりもずっと簡単ですが、ページをレンダリングする前に非同期プロセスが終了するのを待つだけで済みます。関連するコードをコールバック関数の中に入れると、に渡されるfunctionのようになります。

私はあなたが何をしようとしてについていくつかの仮定を作るために持っていたが、私はそれがこのようなものになると思う:答えてくれてありがとう

app.get('/indexInstHome.html', 
    require('connect-ensure-login').ensureLoggedIn('indexErrorAccount.html'), 
    function(req, res, next) { 
     test.find({selector: {"Class.email": req.user._id}}, function(err, result) { 
      if (err) { 
       console.log(err); 
       next(err); 
      } 
      else { 
       // Assuming result cannot be null 
       var hello = result.docs; 

       console.log(hello); 
       res.render('indexInstHome.html', { user: req.user, Classes: hello }); 
      } 
     }); 
    } 
); 
+0

!私は家に帰ると数時間後にそれを試してみる。あなたの仮定はtext.findについて正しいです。私はcbが次のコールバックではないと思った。私は2つの異なる機能を持っていた。しかし、私はここからそれを次のように呼びます。はい、私はコールバックの仕組みを理解していません。学習リソースに関するご意見があれば、私も聞いてみたいと思います。再度、感謝します。 – rastan77

+0

元のコードには 'cb'という2つのものがありますので、' function(req、res、cb) 'の中で' next'と呼ばれるものです。また、2つの匿名関数を作成しました。これは潜在的に「コールバック」と記述される可能性があり、あいまいさのない用語を使用することは困難です。 – skirtle

+0

それは動作します!ありがとうございました!私は修正がいかに簡単か信じられません。 – rastan77

関連する問題