2015-05-06 18 views
11

Düğüm geri çağırma kuralı kullanan bir düğüm modülü kullanıyorum. Bu modülü Bluebird vaatlerini kullanarak bir API'ye dönüştürmek istiyorum. Bunu nasıl yapacağımı anlamıyorum.Bluebird promise `promisifyAll 'çalışmıyor - özelliği okuyamıyor' o zaman '

Düğüm stili geri çağırma işlevim aşağıda. Onu bluebird'in sözüne dönüştürmek istiyorum.

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

Ben PromisifyAll kullanarak bu yolu denedim ama çalışmıyor: Ben then is not a function hataları alıyorum

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

. Bunu nasıl düzeltebilirim?

mavi kuş promisifyAll o zaman her işlev adına bir Async eki ekler ve bu nesnesine bu işlevi ekler kullanarak bir söz tabanlı bir API içine (xml2js gibi) bir modülü dönüştürür

cevap

17

:

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

olmadan parseString çağrı async soneki, özgün geri çağrı tabanlı işlevi çağırır.

+0

İstek ile promisifyAll kullanıyordum ve Async son ekini eklememi gerektirmedi. Belirli bir nedeni var mı? – Antoine

+0

@AnthonyMayfield İstek modülünün varsayılan olarak vaat kavramları kullanılarak yapıldığını düşünüyorum. Bunu, istekte bulunmaksızın kullandım. –