2013-10-13 13 views
9

मैं bluebird का उपयोग करके, वादे नियंत्रण प्रवाह के साथ खेल रहा हूं। ब्लूबर्ड एक नियमित कॉलबैक फ़ंक्शन को एक वादे फ़ंक्शन में परिवर्तित करने के लिए .promisify() विधि प्रदान करता है, लेकिन मुझे अस्पष्ट नहीं है कि फ़ंक्शन अनियमित होने पर मुझे क्या करना चाहिए। उदाहरण के लिए एक requestjs अनुरोध हस्ताक्षर विधिवादे और अनियमित कॉलबैक

request(url, callback) 

वह जगह है जहाँ कॉलबैक

err, res, body 
बजाय

है नियमित

err, res 

मैं कैसे एक वादा करने के लिए इस परिवर्तित किया जाना चाहिए?

उत्तर

14

Promise.promisify() इस तरह के कॉलबैक के साथ भी काम कर सकते हैं। जब एक से अधिक मान दिया जाता है, वे तो बस के साथ एक Array में पारित कर दिया जाएगा:

// ... 

request('http://stackoverflow.com').spread(function (response, body) { 
    console.log(response.statusCode); 
}); 
+5

तुम भी होना चाहिए:

var Promise = require('bluebird'); var request = Promise.promisify(require('request')); request('http://stackoverflow.com').then(function (result) { var response = result[0]; var body = result[1]; console.log(response.statusCode); }); 

कौन सा भी .spread() वापस व्यक्ति तर्क हो सकता है के रूप में Esailija टिप्पणी में उल्लेख किया ['.spread (फ़ंक्शन (प्रतिक्रिया, शरीर) {}) '] का उपयोग करने में सक्षम (https://github.com/petkaantonov/bluebird/blob/master/API.md#spreadfunction-fulfilledhandler--function-rejectedhandler-- --promise) '.then' के स्थान पर – Esailija

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