2017-01-15 33 views
0

我有這個節點的js應用程序與幾個回調函數,我試圖promisify無濟於事。Node.js中的Promisifying回調

它達到了我不知道它是否可能的地步。如果你能幫助我promisify下面的代碼我可能會能夠做到它的其餘部分:

var i2c_htu21d = require('htu21d-i2c'); 
 
var htu21df = new i2c_htu21d(); 
 

 

 
htu21df.readTemperature(function (temp) { 
 
     console.log('Temperature, C:', temp); 
 
});

任何有識之士幫助!

+0

https://stackoverflow.com/questions/22519784/how-do-i-convert-an-existing-callback-api-to-promises –

回答

3

的常見模式是:

<promisified> = function() { 
    return new Promise(function(resolve, reject) { 
     <callbackFunction>(function (err, result) { 
      if (err) 
       reject(err); 
      else 
       resolve(result); 
     }); 
    }); 
} 

針對您的特殊例子(你也許會想添加錯誤處理):

readTemperature = function() { 
    return new Promise(function(resolve) { 
     htu21df.readTemperature(function (temp) { 
      resolve(temp); 
     }); 
    }); 
} 

readTemperature().then(function(temp) { 
    console.log('Temperature, C:', temp); 
}); 
+0

它的工作不知何故!我會繼續練習,但非常感謝你,這對我有很大的幫助! –

1

您需要使用bluebird這一點。

var bluebird = require('bluebird'); 
var i2c_htu21d = require('htu21d-i2c'); 
var htu21df = new i2c_htu21d(); 
var readTemperature = bluebird.promisify(htu21df.readTemperature); 


readTemperature().then((temp) => {console.log('Temperature, C:', temp);});