RxJS 中有几个专门的 From 变体
还有一个 fromPromise
操作符,它将 Promise 转换为 Observable,将它的 resolve
调用转换为 onNext
通知,并将它的 reject
调用转换为 onError
通知。
fromPromise
存在于以下发行版中
rx.async.js
(需要 rx.binding.js
和 rx.js
或 rx.compat.js
)
rx.async.compat.js
(需要 rx.binding.js
和 rx.js
或 rx.compat.js
)
rx.lite.js
rx.lite.compat.js
示例代码
var promise = new RSVP.Promise(function (resolve, reject) {
resolve(42);
});
var source = Rx.Observable.fromPromise(promise);
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (e) { console.log('Error: ' + e); },
function ( ) { console.log('Completed'); });
var promise = new RSVP.Promise(function (resolve, reject) {
reject(new Error('reason'));
});
var source = Rx.Observable.fromPromise(promise);
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (e) { console.log('Error: ' + e); },
function ( ) { console.log('Completed'); });
还有一个 ofArrayChanges
操作符,它使用 Array.observe
方法监控数组,并返回一个发射数组中发生的任何更改的 Observable。此操作符仅存在于 rx.all.js
发行版中。
示例代码
var arr = [1,2,3];
var source = Rx.Observable.ofArrayChanges(arr);
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (e) { console.log('Error: ' + e); },
function ( ) { console.log('Completed'); });
arr.push(4)
Next: {type: "splice", object: Array[4], index: 3, removed: Array[0], addedCount: 1}
类似的操作符是 ofObjectChanges
。它返回一个发射对特定对象进行的任何更改的 Observable,如 Object.observe
方法报告的那样。它也仅存在于 rx.all.js
发行版中。
示例代码
var obj = {x: 1};
var source = Rx.Observable.ofObjectChanges(obj);
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (e) { console.log('Error: ' + e); },
function ( ) { console.log('Completed'); });
obj.x = 42;
Next: {type: "update", object: Object, name: "x", oldValue: 1}
还有一个 pairs
操作符。此操作符接受一个对象,并返回一个发射该对象的属性作为键值对的 Observable。
示例代码
var obj = {
foo: 42,
bar: 56,
baz: 78
};
var source = Rx.Observable.pairs(obj);
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (e) { console.log('Error: ' + e); },
function ( ) { console.log('Completed'); });
Next: ['foo', 42]
Next: ['bar', 56]
Next: ['baz', 78]
Completed
pairs
存在于以下发行版中
rx.js
rx.all.js
rx.all.compat.js
rx.compat.js
rx.lite.js
rx.lite.compat.js