2016-09-25 84 views
0

我正在嘗試爲fileupload功能創建包裝模塊。 下面的代碼看起來很適合我的場景,最近我遇到了rxjs,並想知道我可以如何將以下方法轉換爲Observable。什麼將比承諾更有優勢。Rxjs承諾方法替代

http://mono.software/2014/07/07/Creating-NodeJS-modules-with-both-promise-and-callback-API-support-using-Q/

```

// dual-module.js 
var Q = require('q'); 

module.exports = { 
    getFullName: function (firstName, lastName, callback) { 
    var deferred = Q.defer(); 

    if (firstName && lastName) { 
     var fullName = firstName + " " + lastName; 
     deferred.resolve(fullName); 
    } 
    else { 
     deferred.reject("First and last name must be passed."); 
    } 

    deferred.promise.nodeify(callback); 
    return deferred.promise; 
} 
} 

```

var DualModule = require('dual-module'); 

DualModule.getFullName("John", "Doe") 
.then(function (result) { 
    // result returns "John Doe" 
}) 
.fail(function (error) { 
    // error returns error message if either first or last name are null or undefined 
}); 


var DualModule = require('dual-module'); 

DualModule.getFullName("John", "Doe", function (error, result) { 
    // error returns error message if either first or last name are null or undefined 
    // result returns "John Doe" 
}); 

回答

1

使用原生的承諾和RxJS fromPromise

let promise = new Promise((resolve, reject) => { 
    if xxx resolve(yyy) 
    else reject(zzz) 
}) 

let stream$ = Rx.Observable.fromPromise(promise) 
    .map(res => ...) 
    .catch(err => ...) 
+0

感謝這個不錯, – tomalex