最初の部分観測可能な部分のfromEvent(image, 'load')
は完了していないため、他の部分観測部分は永遠に待機しています。ですから、最初のイベントの後では、サブ観測可能にする必要があります。
take(1)
を使用してください。 2番目のスニペットから
抜粋
...
var loadedImageStream = Rx.Observable
.fromEvent(image, 'load')
.map(function() {
return image;
})
...
(1)サブ観測可能
...
var loadedImageStream = Rx.Observable
.fromEvent(image, 'load')
.map(function() {
return image;
})
.take(1)
...
EDIT完了するために、テイクを追加:concatMap
を使用して
は、画像を読み込むますがシーケンシャルなので遅いです。
index
を渡す場合は、append
の代わりにreplace
を使用して注文を維持できます。この場合、flatMap
を使用すると、高速な同時ロードが可能になります。
$(function() {
var imageURLList = [
'https://placehold.it/500x100',
'https://placehold.it/500x200',
'https://placehold.it/500x300',
'https://placehold.it/500x400',
'https://placehold.it/500x500'
];
var imagesDOM = $('#images');
Rx.Observable
.fromArray(imageURLList)
.do(function (imageURL) {
imagesDOM.append(new Image()); // placeholder
})
.flatMap(function (imageURL, index) {
var image = new Image();
var loadedImageStream = Rx.Observable
.fromEvent(image, 'load')
.map(function() {
return [image, index];
})
.take(1)
image.src = imageURL;
return loadedImageStream;
})
.subscribe(function (image_index) {
var image = image_index[0];
var index = image_index[1];
imagesDOM.children().get(index).replaceWith(image);
})
})
最小限の関連コードを質問に直接入力してください。外部リンクではありません。 – KevinO