2015-08-27 20 views
7

Tôi đang sử dụng RxJS tại đây và dường như không thể vượt qua được điều này dường như vấn đề đơn giản.RxJS: Tách kết quả mảng từ Observable.fromPromise

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'); 
    }); 

Mã trên kích hoạt từng mục mảng theo thứ tự như mong đợi.

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); 
    }); 
} 

Ở đây mặc dù tôi chỉ nhận được mảng đầy đủ (ví dụ: [ 1, 2, 3, 54, 3, 22, 323, 23, 11, 2 ]). Không nên RxJS phá vỡ kết quả ngoài? Tôi hy vọng nó ít nhất cũng có một số logic cho việc này.

Cảm ơn bạn

+0

Ngoài ra tôi sẽ hoàn toàn sẵn sàng để thực hiện một số loại thay đổi mà có thể biến những dòng * sau * lời hứa đã được giải quyết .. ví dụ nhận mảng đầy đủ (1 mục trong luồng) và biến nó thành các mục array.length trong luồng. –

Trả lời

15

Không, nó sẽ không tách rời chúng ra một cách hoàn toàn. Nếu bạn muốn chia họ sử dụng flatMap mà sẽ san bằng các mảng:

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'); 
    }); 
+0

Cảm ơn bạn! Đó là chính xác những gì tôi đang tìm kiếm –

+2

Đáng yêu, tôi không biết rằng 'flatMap' sẽ làm phẳng một iterable. – Brandon

+0

Wohoo, câu trả lời xuất sắc, giải quyết được vấn đề của tôi, cảm ơn tuyệt vời @paulpdeniels – hhsadiq

Các vấn đề liên quan