Guest User

Untitled

a guest
Dec 14th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.90 KB | None | 0 0
  1. var paths = ["imagePath1","imagePath2"];
  2.  
  3. var img = new Image();
  4. img.src = imagePath;
  5. image.onload // <- when this callback fires I'll add them to the images array
  6.  
  7. Rx.Observable.fromArray(imagepathes)
  8.  
  9. Rx.Observable.fromCallback(...)
  10.  
  11. function loadImage(imagePath){
  12. return Rx.Observable.create(function(observer){
  13. var img = new Image();
  14. img.src = imagePath;
  15. img.onload = function(){
  16. observer.onNext(img);
  17. observer.onCompleted();
  18. }
  19. img.onError = function(err){
  20. observer.onError(err);
  21. }
  22. });
  23. }
  24.  
  25. Rx.Observable
  26. .fromArray(imagepathes)
  27. .concatMap(loadImage) // or flatMap to get images in load order
  28. .toArray()
  29. .subscribe(function(images){
  30. // do something with loaded images
  31. })
  32.  
  33. function loadImage(url){
  34. var img = new Image;
  35. img.src = url;
  36. var o = new Rx.Subject();
  37. img.onload = function(){ o.onNext(img); o.onCompleted(); };
  38. img.onerror = function(e){ o.onError(e); }; // no fromEvent for err handling
  39. return o;
  40. }
  41.  
  42. var imageUrls = ['url1', 'url2', 'url3'];
  43. var joined = Rx.Observable.merge(imageUrls.map(loadImage));
  44.  
  45. // consume one by one:
  46. joined.subscribe(function(item){
  47. // wait for item
  48. });
  49.  
  50. joined.toArray().subscribe(function(arr){
  51. // access results array in arr
  52. });
  53.  
  54. var imageUrls = ['url1', 'url2', 'url3'];
  55. fromArray(imageUrls).map(url => {
  56. var img = new Image;
  57. img.src = url;
  58. return fromEvent(img, "load");
  59. }).toArray().subscribe(function(arr){
  60. // access results here
  61. });
  62.  
  63. /**
  64. * Loads an image and returns a promise
  65. * @param {string} url - URL of image to load
  66. * @return {Promise<Image>} - Promise for an image once finished loading.
  67. */
  68. function loadImageAsync(url) {
  69. return new Promise(function(resolve, reject) {
  70. var img = new Image();
  71. img.src = imagePath;
  72. image.onload = function() { resolve(img); };
  73. image.onerror = reject;
  74. });
  75. }
  76.  
  77. var imageUrls = ['url1', 'url2', 'url3'];
  78. Promise.all(imageUrls.map(loadImageAsync))
  79. .then(function(arrayOfImageElements) {
  80. // All done!
  81. });
  82.  
  83. var imagesLoaded = function (sources) {
  84.  
  85. return Rx.Observable.create(function (observer) {
  86.  
  87. var numImages = sources.length
  88. var loaded = 0
  89. var images = []
  90.  
  91. function onComplete (img) {
  92. images.push(img)
  93. console.log('loaded: ', img)
  94.  
  95. loaded += 1
  96. if (loaded === numImages) {
  97. observer.onNext(images)
  98. observer.onCompleted()
  99. }
  100. }
  101.  
  102. sources.forEach(function (src) {
  103. var img = new Image()
  104. img.onload = function () {
  105. onComplete(img)
  106. }
  107. console.log('add src: ' + src)
  108. img.src = src
  109. if (img.complete) {
  110. img.onload = null
  111. onComplete(img)
  112. }
  113.  
  114. })
  115.  
  116. })
  117.  
  118. }
  119.  
  120. console.time('load images'); // start measuring execution time
  121.  
  122. imagesLoaded(sources)
  123. // use flatMap to get the individual images
  124. // .flatMap(function (x) {
  125. // return Rx.Observable.from(x)
  126. // })
  127.  
  128. .subscribe(function (x) {
  129. console.timeEnd('load images'); // see how fast this was
  130. console.log(x)
  131. })
  132.  
  133. import { from, fromEvent } from 'rxjs';
  134. import { mergeMap, map, scan, filter } from 'rxjs/operators';
  135.  
  136. const paths = ["imagePath1","imagePath2"];
  137.  
  138. from(paths).pipe(
  139. mergeMap((path) => {
  140. const img = new Image();
  141.  
  142. img.src = path;
  143. return fromEvent(img, 'load').pipe(
  144. map((e) => e.target)
  145. );
  146. }),
  147. scan((acc, curr) => [...acc, curr], []),
  148. filter((images) => images.length === path.length)
  149. ).subscribe((images) => {
  150. // do what you want with images
  151. });
  152.  
  153. import { Observable, Observer } from "rxjs";
  154.  
  155. public loadImage(imagePath: string): Observable<HTMLImageElement> {
  156. return Observable.create((observer: Observer<HTMLImageElement>) => {
  157. var img = new Image();
  158. img.src = imagePath;
  159. img.onload = () => {
  160. observer.next(img);
  161. observer.complete();
  162. };
  163. img.onerror = err => {
  164. observer.error(err);
  165. };
  166. });
  167. }
Add Comment
Please, Sign In to add comment