2012-07-27 27 views
6

Lütfen yeni ilahlığımı sözler konseptiyle bağışlayın. Node.js.'deki Q modülünü kullanıyorum. Gerekli adımları tamamladıktan sonra geri çağırma yapmak için bir işlev var. Sorun, Q vaatinden geri arama işlevini çağırmak istediğimde ortaya çıkar.Bir geri dönüş gerçekleştirirken Node.js'de bir Q vaatten mi çıkıyorsunuz?

İstenilen işlevsellik, son adıma ulaştığımda geri arama çağrısı yapabilmek ve artık söz zincirinde bulunmamak. Bu nedenle, geri arama orijinal işlemine geri dönecektir. Bununla birlikte, onu kodladığım gibi, geri bildirme sözün bağlamında çağrılır. Bu noktada, geri çağırma (demek) bir hata atmalı, bu işlevin hata işleyicisi tarafından yakalanır, bu benim istediğim şey değil!

var updateDataStream = function(data, input, posts, stream, callback) { 

    // Pack all the items up... 
    Q.ncall(data._packStream, data, posts, stream) 
    // Upsert the cache into the database 
    .then(function(){ 
     return Q.ncall(data.upsert, data); 
    }) 
    // buffer the new input 
    .then(function(res){ 
     return Q.ncall(data.buffer, data, input); 
    }) 
    .then(function(final){ 
     callback(null, final); 
    }) 
    .fail(function(err){ 
     console.log('OHNOES!!!!!!!',err); 
    }).end(); 
} 

Bu bağlamda, geri arama işlevi sırasında meydana gelen bir hata "OHNOES !!!!!" yazdırılmak üzere ....

cevap

4

Bir vaat zincirinin (isteğe bağlı olarak) bir NodeJS stili devamına geçmesini (isteğe bağlı olarak) gönderecek ve bir nodeify yöntemi vardır.

var updateDataStream = function(data, input, posts, stream, callback) { 

    // Pack all the items up... 
    return Q.ncall(data._packStream, data, posts, stream) 
    // Upsert the cache into the database 
    .then(function(){ 
     return Q.ncall(data.upsert, data); 
    }) 
    // buffer the new input 
    .then(function(res){ 
     return Q.ncall(data.buffer, data, input); 
    }) 
    .nodeify(callback); 

} 

Not zincirinin başlangıcında ilave "dönüş" ve "nodeify (geri)" sonuna eklenmektedir.

Kullanıcılarınızın, Q'ı kullandığınız akıllıca olmaları gerekmeyecek… geri aramadan ayrılmadıkça, bunun yerine bir söz alacaklardır.

İlgili konular