RxJS:从Observable.fromPromise拆分数组结果

Mat*_*Rea 10 arrays reactive-programming rxjs

我在这里使用RxJS,我似乎无法克服这个看似简单的问题.

rx.Observable
    .from([1,2,3,54,3,22,323,23,11,2])
    .distinct()
    .subscribe(function next (x) {
        console.log('Next');
        console.log(x);
    }, function error (x) {
        console.log('Error');
        console.log(x);
    }, function completed () {
        console.log('Completed');
    });
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期顺序吐出每个数组项.

rx.Observable
    .fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2]))
    .distinct()
    .subscribe(function next (x) {
        console.log('Next');
        console.log(x);
    }, function error (x) {
        console.log('Error');
        console.log(x);
    }, function completed () {
        console.log('Completed');
    });

function getNumbers (nums) {
    return new Promise(function (resolve, reject) {
        resolve(nums);
    });
}
Run Code Online (Sandbox Code Playgroud)

虽然我只得到完整的数组(即[ 1, 2, 3, 54, 3, 22, 323, 23, 11, 2 ]).RxJS不应该破坏结果吗?我希望它至少对此有一些逻辑.

谢谢

pau*_*els 22

不,它不会隐含地将它们分开.如果你想拆分它们使用flatMap会使数组变平:

 rx.Observable
    .fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2]))
    .flatMap(function(x) { return x; })
    .distinct()
    .subscribe(function next (x) {
        console.log('Next');
        console.log(x);
    }, function error (x) {
        console.log('Error');
        console.log(x);
    }, function completed () {
        console.log('Completed');
    });
Run Code Online (Sandbox Code Playgroud)

  • 可爱,我不知道`flatMap`会变得可迭代. (3认同)