@@ -12,14 +12,17 @@ import axios from 'axios';
12
12
export const NetworkScreen : React . FC = ( ) => {
13
13
const [ endpointUrl , setEndpointUrl ] = useState ( '' ) ;
14
14
const { width, height } = useWindowDimensions ( ) ;
15
- const defaultRequestUrl = 'https://jsonplaceholder.typicode.com/posts/1' ;
15
+ const defaultRequestBaseUrl = 'https://jsonplaceholder.typicode.com/posts/' ;
16
+ const shortenLink = 'https://shorturl.at/3Ufj3' ;
17
+ const defaultRequestUrl = `${ defaultRequestBaseUrl } 1` ;
18
+
16
19
const imageUrls = [
17
20
'https://fastly.picsum.photos/id/57/200/300.jpg?hmac=l908G1qVr4r7dP947-tak2mY8Vvic_vEYzCXUCKKskY' ,
18
21
'https://fastly.picsum.photos/id/619/200/300.jpg?hmac=WqBGwlGjuY9RCdpzRaG9G-rc9Fi7TGUINX_-klAL2kA' ,
19
22
] ;
20
23
21
24
async function sendRequestToUrl ( ) {
22
- let urlToSend = '' ;
25
+ let urlToSend : string ;
23
26
24
27
if ( endpointUrl . trim ( ) !== '' ) {
25
28
urlToSend = endpointUrl ;
@@ -47,7 +50,7 @@ export const NetworkScreen: React.FC = () => {
47
50
}
48
51
49
52
async function sendRequestToUrlUsingAxios ( ) {
50
- let urlToSend = '' ;
53
+ let urlToSend : string ;
51
54
52
55
if ( endpointUrl . trim ( ) !== '' ) {
53
56
urlToSend = endpointUrl ;
@@ -72,6 +75,26 @@ export const NetworkScreen: React.FC = () => {
72
75
}
73
76
}
74
77
78
+ async function sendRedirectRequestToUrl ( ) {
79
+ try {
80
+ console . log ( 'Sending request to: ' , shortenLink ) ;
81
+ const response = await fetch ( shortenLink ) ;
82
+ console . log ( 'Received from: ' , response . url ) ;
83
+
84
+ // Format the JSON response for better logging
85
+ const data = await response . json ( ) ;
86
+
87
+ // Format the JSON response for better logging
88
+ const formattedData = JSON . stringify ( data , null , 2 ) ;
89
+
90
+ // Log the formatted response
91
+ console . log ( 'Response:' , formattedData ) ;
92
+ } catch ( error ) {
93
+ // Handle errors appropriately
94
+ console . error ( 'Error:' , error ) ;
95
+ }
96
+ }
97
+
75
98
const fetchGraphQlData = async ( ) => {
76
99
const document = gql `
77
100
query {
@@ -90,6 +113,40 @@ export const NetworkScreen: React.FC = () => {
90
113
91
114
const { data, isError, isSuccess, isLoading, refetch } = useQuery ( 'helloQuery' , fetchGraphQlData ) ;
92
115
116
+ function generateUrls ( count : number = 10 ) {
117
+ const urls = [ ] ;
118
+ for ( let i = 1 ; i <= count ; i ++ ) {
119
+ urls . push ( defaultRequestBaseUrl + i ) ;
120
+ }
121
+ return urls ;
122
+ }
123
+
124
+ async function makeSequentialApiCalls ( urls : string [ ] ) : Promise < any [ ] > {
125
+ // const fetchPromises = urls.map((url) => fetch(url).then((response) => response.json()));
126
+ const results : any [ ] = [ ] ;
127
+
128
+ try {
129
+ for ( let i = 0 ; i < urls . length ; i ++ ) {
130
+ await fetch ( urls [ i ] ) ;
131
+ results . push ( results [ i ] ) ;
132
+ }
133
+ return results ;
134
+ } catch ( error ) {
135
+ console . error ( 'Error making parallel API calls:' , error ) ;
136
+ throw error ;
137
+ }
138
+ }
139
+ async function makeParallelApiCalls ( urls : string [ ] ) : Promise < any [ ] > {
140
+ const fetchPromises = urls . map ( ( url ) => fetch ( url ) . then ( ( response ) => response . json ( ) ) ) ;
141
+
142
+ try {
143
+ return await Promise . all ( fetchPromises ) ;
144
+ } catch ( error ) {
145
+ console . error ( 'Error making parallel API calls:' , error ) ;
146
+ throw error ;
147
+ }
148
+ }
149
+
93
150
return (
94
151
< ScrollView >
95
152
< Screen >
@@ -102,11 +159,29 @@ export const NetworkScreen: React.FC = () => {
102
159
value = { endpointUrl }
103
160
/>
104
161
< CustomButton onPress = { sendRequestToUrl } title = "Send Request To Url" />
162
+ < CustomButton
163
+ onPress = { sendRedirectRequestToUrl }
164
+ title = "Send Redirection Request To Url"
165
+ />
105
166
< CustomButton
106
167
onPress = { sendRequestToUrlUsingAxios }
107
168
title = "Send Request To Url Using Axios"
108
169
/>
109
170
171
+ < CustomButton
172
+ onPress = { ( ) => makeParallelApiCalls ( generateUrls ( ) ) }
173
+ title = "Send Parallel Requests"
174
+ />
175
+ < CustomButton
176
+ onPress = { ( ) => makeSequentialApiCalls ( generateUrls ( ) ) }
177
+ title = "Send Sequantail Requests"
178
+ />
179
+
180
+ < CustomButton
181
+ onPress = { ( ) => makeSequentialApiCalls ( generateUrls ( ) ) }
182
+ title = "Send Sequantail Requests"
183
+ />
184
+
110
185
< CustomButton onPress = { ( ) => refetch } title = "Reload GraphQL" />
111
186
< View >
112
187
{ isLoading && < Text > Loading...</ Text > }
0 commit comments