2014-07-27 35 views
7

Ben node express 4.0 kullanıyorum. İnternette (dokümanlar dahil) bir rotada eşzamansız kod yerleştirme hakkında hiçbir şey bulamıyorum. Bir katman sayesindeDüğüm eşzamansız bir yol kodu

oldukça basit: yolları ile

app.use('/something', function (req, res, next) 
{ 
    doSomethingAsync(function(err, probablySomethingElse) 
    { 
    // probably some error checking 
    next(); 
    }); 
}); 

sorun yok next geri arama olmamasıdır, bu yüzden bir sonraki iş geçmek için ne zaman nasıl biliyor ekspres geliyor? Sanırım olsaydı

app.get('/something', function (req, res) 
{ 
    res.render('someTemplate'); 
    // no next() here, but it still works 
}); 

, hemen yukarıdaki fonksiyon çıkar sonra sonraki göreve yönündeki kesin hamle söyleyebilirim. Ama meraktan ben ...

app.get('/something', function (req, res, next) 
{ 
    console.log(next); 
}); 

Aşağıdaki kodu çıkardık ... ve aslında geçirilen bazı next geri arama yoktur. Peki burada neler oluyor? Sahne arkasında nasıl çalışır? Ve asenkron kodları buraya nasıl koyabilirim?

+0

Biraz daha açık olabilirsiniz, hangi uyumsuzluk kodunu rotaya koymak istiyorsunuz ve bu, tüm rotaların gerçekleştiği 'ileri' geri dönüşü ile nasıl ilgilidir. – adeneo

+1

Bir şey res.render() 'derken,' next() 'işlevini aramanıza gerek yoktur (bu şekilde iletilse bile * siz * isterseniz * yapabilirsiniz) çünkü bu zincirin ** sonu **. – Bergi

+0

Express bir şekilde geri aramamın ne zaman çıkacağını bilmesi için soketi kapatabilir ve bu istek ile ilişkili verileri bırakabilir. Doğru bir şekilde anladım, eğer 'res.render' adını verirsem, planlanan zaman uyumsuz görevlerin olmadığını ve 'next' çağrılmasının beklemesinin gerekmediğini düşünecek miyim? –

cevap

5

Soketi kapatmak için res.render numaralı telefonu arayana kadar Express bekleyecektir. Bunun anlamı, res.render'u X saniye süren bir geri çağırmaya geçirebileceğiniz anlamına gelir ve her şey hala çalışır.

next Eğer değer eşler sonraki rota gitmek için izin verir, sen burada çok iyi bir açıklama bulabilirsiniz: What is the parameter "next" used for in Express?

Ama altında burada ne soruyorsun. render() anı nesnesinde çağrılır, daha sonra veri gönderilir ve soket kapanır.