Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var paths = ["imagePath1","imagePath2"];
- var img = new Image();
- img.src = imagePath;
- image.onload // <- when this callback fires I'll add them to the images array
- Rx.Observable.fromArray(imagepathes)
- Rx.Observable.fromCallback(...)
- function loadImage(imagePath){
- return Rx.Observable.create(function(observer){
- var img = new Image();
- img.src = imagePath;
- img.onload = function(){
- observer.onNext(img);
- observer.onCompleted();
- }
- img.onError = function(err){
- observer.onError(err);
- }
- });
- }
- Rx.Observable
- .fromArray(imagepathes)
- .concatMap(loadImage) // or flatMap to get images in load order
- .toArray()
- .subscribe(function(images){
- // do something with loaded images
- })
- function loadImage(url){
- var img = new Image;
- img.src = url;
- var o = new Rx.Subject();
- img.onload = function(){ o.onNext(img); o.onCompleted(); };
- img.onerror = function(e){ o.onError(e); }; // no fromEvent for err handling
- return o;
- }
- var imageUrls = ['url1', 'url2', 'url3'];
- var joined = Rx.Observable.merge(imageUrls.map(loadImage));
- // consume one by one:
- joined.subscribe(function(item){
- // wait for item
- });
- joined.toArray().subscribe(function(arr){
- // access results array in arr
- });
- var imageUrls = ['url1', 'url2', 'url3'];
- fromArray(imageUrls).map(url => {
- var img = new Image;
- img.src = url;
- return fromEvent(img, "load");
- }).toArray().subscribe(function(arr){
- // access results here
- });
- /**
- * Loads an image and returns a promise
- * @param {string} url - URL of image to load
- * @return {Promise<Image>} - Promise for an image once finished loading.
- */
- function loadImageAsync(url) {
- return new Promise(function(resolve, reject) {
- var img = new Image();
- img.src = imagePath;
- image.onload = function() { resolve(img); };
- image.onerror = reject;
- });
- }
- var imageUrls = ['url1', 'url2', 'url3'];
- Promise.all(imageUrls.map(loadImageAsync))
- .then(function(arrayOfImageElements) {
- // All done!
- });
- var imagesLoaded = function (sources) {
- return Rx.Observable.create(function (observer) {
- var numImages = sources.length
- var loaded = 0
- var images = []
- function onComplete (img) {
- images.push(img)
- console.log('loaded: ', img)
- loaded += 1
- if (loaded === numImages) {
- observer.onNext(images)
- observer.onCompleted()
- }
- }
- sources.forEach(function (src) {
- var img = new Image()
- img.onload = function () {
- onComplete(img)
- }
- console.log('add src: ' + src)
- img.src = src
- if (img.complete) {
- img.onload = null
- onComplete(img)
- }
- })
- })
- }
- console.time('load images'); // start measuring execution time
- imagesLoaded(sources)
- // use flatMap to get the individual images
- // .flatMap(function (x) {
- // return Rx.Observable.from(x)
- // })
- .subscribe(function (x) {
- console.timeEnd('load images'); // see how fast this was
- console.log(x)
- })
- import { from, fromEvent } from 'rxjs';
- import { mergeMap, map, scan, filter } from 'rxjs/operators';
- const paths = ["imagePath1","imagePath2"];
- from(paths).pipe(
- mergeMap((path) => {
- const img = new Image();
- img.src = path;
- return fromEvent(img, 'load').pipe(
- map((e) => e.target)
- );
- }),
- scan((acc, curr) => [...acc, curr], []),
- filter((images) => images.length === path.length)
- ).subscribe((images) => {
- // do what you want with images
- });
- import { Observable, Observer } from "rxjs";
- public loadImage(imagePath: string): Observable<HTMLImageElement> {
- return Observable.create((observer: Observer<HTMLImageElement>) => {
- var img = new Image();
- img.src = imagePath;
- img.onload = () => {
- observer.next(img);
- observer.complete();
- };
- img.onerror = err => {
- observer.error(err);
- };
- });
- }
Add Comment
Please, Sign In to add comment