2012-07-27 7 views
6

कृपया वादे की अवधारणा के साथ मेरी नवीनता को क्षमा करें। मैं Node.js. में क्यू मॉड्यूल का उपयोग कर रहा हूँ। मेरे पास एक ऐसा फ़ंक्शन है जिसका उपयोग कॉलबैक को कॉल करने के लिए किया जाता है जब उसने सभी आवश्यक कदम उठाए हों। समस्या तब होती है जब मैं क्यू वादे के भीतर से कॉलबैक फ़ंक्शन को कॉल करना चाहता हूं।कॉलबैक करते समय Node.js में एक क्यू वादे से बाहर तोड़ना?

मेरी वांछित कार्यक्षमता कॉलबैक को कॉल करने में सक्षम होना है जब मैं अंतिम चरण तक पहुंचता हूं, और अब वादे की श्रृंखला में नहीं होता। इस प्रकार, कॉलबैक वापस अपने मूल ऑपरेशन पर वापस आ जाएगा। हालांकि, जैसा कि मैंने इसे कोड किया है, कॉलबैक को वादे के संदर्भ में बुलाया जाता है। इस बिंदु पर, कॉलबैक (कहना) एक त्रुटि फेंकना चाहिए, यह इस फ़ंक्शन में त्रुटि हैंडलर द्वारा पकड़ा जाता है, जो मैं नहीं चाहता!

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(); 
} 

इस संदर्भ में, कॉलबैक फ़ंक्शन के भीतर हो रहा एक त्रुटि का कारण बनता है "OHNOES !!!!!" मुद्रित करने के लिए ....

उत्तर

4

एक विधि है, nodeify जो (वैकल्पिक रूप से) एक वादे श्रृंखला से बाहर हो जाएगा और एक नोडजेएस-शैली निरंतरता के लिए आगे बढ़ेगा।

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); 

} 

श्रृंखला की शुरुआत में जोड़ा गया "वापसी" और अंत में जोड़े गए "नोडिफ़ाई (कॉलबैक)" पर ध्यान दें।

आपके उपयोगकर्ताओं को कोई भी बुद्धिमानी नहीं है जिसे आप क्यू का उपयोग कर रहे हैं ... जब तक कि वे कॉलबैक को छोड़ दें, इस मामले में उन्हें इसके बजाय एक वादा मिलेगा।

संबंधित मुद्दे