2015-05-06 10 views
11

मैं नोड कॉलबैक सम्मेलन का उपयोग करने वाले नोड मॉड्यूल का उपयोग कर रहा हूं। मैं इस मॉड्यूल को ब्लूबर्ड वादे का उपयोग करके एपीआई में परिवर्तित करना चाहता हूं। मुझे यह नहीं मिल रहा है कि यह कैसे करें।ब्लूबर्ड वादा `promisifyAll` काम नहीं कर रहा है - संपत्ति को पढ़ नहीं सकता 'फिर`

नीचे मेरा नोड शैली कॉलबैक फ़ंक्शन है। मैं इसे ब्लूबर्ड के तत्काल वादे में परिवर्तित करना चाहता हूं।

var module = require('module'); // for example xml2js, or Mongoose 
var parseString = xml2js.parseString; 
    parseString(xml, function (err, result) { // the regular API 
     if (err) { 
     console.log("Error in generation json from xml"); 
     } else { 
     return result; 
     } 
    }); 

मैं इस तरह से PromisifyAll उपयोग करने की कोशिश, लेकिन यह काम नहीं कर रहा:

var module = Promise.promisifyAll(require('module')); // for example xml2js 
xml2js.parseString(xml) 
     .then(function (result) { 
      console.log("result = ", result); 
     }) 
     .catch(function (err) { 
      console.err(err); 
     }); 

मैं then is not a function त्रुटियों हो रही है। मेरे द्वारा यह कैसे किया जा सकता है?

उत्तर

17

जब Bluebird एक वादा आधारित एपीआई का उपयोग कर promisifyAll तो यह प्रत्येक कार्य नाम के लिए एक Async प्रत्यय जोड़ देती है और उस वस्तु में है कि समारोह कहते हैं में एक मॉड्यूल (xml2js) की तरह धर्मान्तरित:

var xml2js = Promise.promisifyAll(require('xml2js')); // example: xml2js 
xml2js.parseStringAsync(xml) // NOTE THE ASYNC SUFFIX 
     .then(function (result) { 
      console.log("result = " + JSON.stringify(result)); 
     }) 
     .catch(function (err) { 
      console.err(err); 
     }); 

जब आप बिना parseString फोन async प्रत्यय, यह मूल कॉलबैक-आधारित फ़ंक्शन को कॉल करता है।

+0

मैं अनुरोध के साथ promisifyAll का उपयोग कर रहा था, और मुझे Async प्रत्यय जोड़ने की आवश्यकता नहीं थी। क्या कोई विशेष कारण है? – Antoine

+0

@ एंथनीमेफील्ड मुझे लगता है कि अनुरोध मॉड्यूल डिफ़ॉल्ट रूप से वादे अवधारणाओं का उपयोग करके किया जाता है। मैंने इसका इस्तेमाल किया। फिर बिना इसे प्रमाणित किए अनुरोध पर –

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