2016-09-25 81 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