1
+ <!DOCTYPE html>
2
+ < html >
3
+ < head >
4
+ < title > Javascript Promise Race</ title >
5
+ </ head >
6
+ < body >
7
+ < h2 > Javascript Promise Race</ h2 >
8
+ < script >
9
+ let urls = [
10
+ 'https://jsonplaceholder.typicode.com/users' ,
11
+ 'https://jsonplaceholder.typicode.com/posts/1'
12
+ ] ;
13
+ const promise1 = new Promise ( ( resolve , reject ) => {
14
+ const request = new XMLHttpRequest ( ) ;
15
+ request . open ( 'GET' , urls [ 0 ] ) ;
16
+ request . onload = ( ) => {
17
+ if ( request . status === 200 ) {
18
+ resolve ( request . response ) ; // we got data here, so resolve the Promise
19
+ } else {
20
+ reject ( Error ( request . statusText ) ) ; // status is not 200 OK, so reject
21
+ }
22
+ } ;
23
+ request . onerror = ( ) => {
24
+ reject ( Error ( 'Error fetching data.' ) ) ; // error occurred, reject the Promise
25
+ } ;
26
+
27
+ request . send ( ) ; // send the request
28
+ } ) ;
29
+
30
+ const promise2 = new Promise ( ( resolve , reject ) => {
31
+ const request = new XMLHttpRequest ( ) ;
32
+ request . open ( 'GET' , urls [ 1 ] ) ;
33
+ request . onload = ( ) => {
34
+ if ( request . status === 200 ) {
35
+ resolve ( request . response ) ; // we got data here, so resolve the Promise
36
+ } else {
37
+ reject ( Error ( request . statusText ) ) ; // status is not 200 OK, so reject
38
+ }
39
+ } ;
40
+ request . onerror = ( ) => {
41
+ reject ( Error ( 'Error fetching data.' ) ) ; // error occurred, reject the Promise
42
+ } ;
43
+
44
+ request . send ( ) ; // send the request
45
+ } ) ;
46
+
47
+ /* The Promise.race() method returns a promise that fulfills or rejects as soon as
48
+ one of the promises in an iterable fulfills or rejects, with the value or reason from that promise. */
49
+ Promise . race ( [ promise1 , promise2 ] ) . then ( responses => {
50
+ // respose will get in string format. JSON.parse is used to convert string to JSON format
51
+ console . log ( 'Promise Race responses => ' , typeof ( responses ) , JSON . parse ( responses ) ) ;
52
+ } ) ;
53
+ </ script >
54
+ </ body >
55
+ </ html >
0 commit comments