The Zurich release has arrived! Interested in new features and functionalities? Click here for more

Async and promise.All in a catalog client script

Smith Johnson
Tera Guru

Hello,

I have the following script 

var fetchNames = async () => {
      console.log("aa");
      try {
        var res = await Promise.all([
          fetch(url1,{
				method: "GET",
				headers: {
					"Accept" : "application/json",
					"Authorization" : "eyJraWQiOiJ0QkdvUmhIWVp2NUEzcjRlWHlHbHdtd2o1ZUFUMnVkSmx3MzVNcDIraW9zPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI2YTdiNzVmZi1jMWNkLTRiZmEtYThmNi00ODUyNzg0NmY2ZmUiLCJhdWQiOiI2ODRzMThjMDFlMDNuYXRtM2s4b3BxaGY2cCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJldmVudF9pZCI6ImQ0ZmJmMzQ2LWIwOGYtNGQzNS04MDI5LWJiOWI3ZTQ5MGJhZiIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNjQ2MTU2Njc5LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV9xZ1duSGVTYkQiLCJjb2duaXRvOnVzZXJuYW1lIjoicHBtdGVhbUB2b2RhZm9uZS5jb20iLCJleHAiOjE2NDYxNjAyNzksImlhdCI6MTY0NjE1NjY3OSwiZW1haWwiOiJwcG10ZWFtQHZvZGFmb25lLmNvbSJ9.EWK_8d2MSyUloQsnZxgGHRASlq9HdFLHuJgdC4ZqOvg8CiX5m3b1lqeIqb6HWkBUXpGSThqhqMmoKTmKql4VIGsWdfPM0h4gOyVOTEgsigG2GU86J6IkOogP4F0uR_qoG5daHsFwRiPzSYIskAd3yJQ53a4L8P_uTmaUeb5JcBOvXvp9r9HSp_iGPVL3nJ0zyKzlASkFYIPtuRVrfR1_ilLEOgHLe3B2HCQNdDLlFhlZQbvRKVUmsEZyrLgTXt7wN7RQ9pQRUF7gDPNeevwZTVyqcj5XfjvINpXBqpnZE3OzzQrp5SXbSLhUG8V2Uaw0UcE-e2DdXDsths0YJXneqQ",
					"Content-Type" : "application/json",
					"User-Agent" : "servicenow"
				}
			}),
			 fetch(url2,{
				method: "GET",
				headers: {
					"Accept" : "application/json",
					"Authorization" : "eyJraWQiOiJ0QkdvUmhIWVp2NUEzcjRlWHlHbHdtd2o1ZUFUMnVkSmx3MzVNcDIraW9zPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI2YTdiNzVmZi1jMWNkLTRiZmEtYThmNi00ODUyNzg0NmY2ZmUiLCJhdWQiOiI2ODRzMThjMDFlMDNuYXRtM2s4b3BxaGY2cCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJldmVudF9pZCI6ImQ0ZmJmMzQ2LWIwOGYtNGQzNS04MDI5LWJiOWI3ZTQ5MGJhZiIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNjQ2MTU2Njc5LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV9xZ1duSGVTYkQiLCJjb2duaXRvOnVzZXJuYW1lIjoicHBtdGVhbUB2b2RhZm9uZS5jb20iLCJleHAiOjE2NDYxNjAyNzksImlhdCI6MTY0NjE1NjY3OSwiZW1haWwiOiJwcG10ZWFtQHZvZGFmb25lLmNvbSJ9.EWK_8d2MSyUloQsnZxgGHRASlq9HdFLHuJgdC4ZqOvg8CiX5m3b1lqeIqb6HWkBUXpGSThqhqMmoKTmKql4VIGsWdfPM0h4gOyVOTEgsigG2GU86J6IkOogP4F0uR_qoG5daHsFwRiPzSYIskAd3yJQ53a4L8P_uTmaUeb5JcBOvXvp9r9HSp_iGPVL3nJ0zyKzlASkFYIPtuRVrfR1_ilLEOgHLe3B2HCQNdDLlFhlZQbvRKVUmsEZyrLgTXt7wN7RQ9pQRUF7gDPNeevwZTVyqcj5XfjvINpXBqpnZE3OzzQrp5SXbSLhUG8V2Uaw0UcE-e2DdXDsths0YJXneqQ",
					"Content-Type" : "application/json",
					"User-Agent" : "servicenow"
				}
			}),
			fetch(url3,{
				method: "GET",
				headers: {
					"Accept" : "application/json",
					"Authorization" : "eyJraWQiOiJ0QkdvUmhIWVp2NUEzcjRlWHlHbHdtd2o1ZUFUMnVkSmx3MzVNcDIraW9zPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI2YTdiNzVmZi1jMWNkLTRiZmEtYThmNi00ODUyNzg0NmY2ZmUiLCJhdWQiOiI2ODRzMThjMDFlMDNuYXRtM2s4b3BxaGY2cCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJldmVudF9pZCI6ImQ0ZmJmMzQ2LWIwOGYtNGQzNS04MDI5LWJiOWI3ZTQ5MGJhZiIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNjQ2MTU2Njc5LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV9xZ1duSGVTYkQiLCJjb2duaXRvOnVzZXJuYW1lIjoicHBtdGVhbUB2b2RhZm9uZS5jb20iLCJleHAiOjE2NDYxNjAyNzksImlhdCI6MTY0NjE1NjY3OSwiZW1haWwiOiJwcG10ZWFtQHZvZGFmb25lLmNvbSJ9.EWK_8d2MSyUloQsnZxgGHRASlq9HdFLHuJgdC4ZqOvg8CiX5m3b1lqeIqb6HWkBUXpGSThqhqMmoKTmKql4VIGsWdfPM0h4gOyVOTEgsigG2GU86J6IkOogP4F0uR_qoG5daHsFwRiPzSYIskAd3yJQ53a4L8P_uTmaUeb5JcBOvXvp9r9HSp_iGPVL3nJ0zyKzlASkFYIPtuRVrfR1_ilLEOgHLe3B2HCQNdDLlFhlZQbvRKVUmsEZyrLgTXt7wN7RQ9pQRUF7gDPNeevwZTVyqcj5XfjvINpXBqpnZE3OzzQrp5SXbSLhUG8V2Uaw0UcE-e2DdXDsths0YJXneqQ",
					"Content-Type" : "application/json",
					"User-Agent" : "servicenow"
				}
			}),
			fetch(url4,{
				method: "GET",
				headers: {
					"Accept" : "application/json",
					"Authorization" : "eyJraWQiOiJ0QkdvUmhIWVp2NUEzcjRlWHlHbHdtd2o1ZUFUMnVkSmx3MzVNcDIraW9zPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI2YTdiNzVmZi1jMWNkLTRiZmEtYThmNi00ODUyNzg0NmY2ZmUiLCJhdWQiOiI2ODRzMThjMDFlMDNuYXRtM2s4b3BxaGY2cCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJldmVudF9pZCI6ImQ0ZmJmMzQ2LWIwOGYtNGQzNS04MDI5LWJiOWI3ZTQ5MGJhZiIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNjQ2MTU2Njc5LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV9xZ1duSGVTYkQiLCJjb2duaXRvOnVzZXJuYW1lIjoicHBtdGVhbUB2b2RhZm9uZS5jb20iLCJleHAiOjE2NDYxNjAyNzksImlhdCI6MTY0NjE1NjY3OSwiZW1haWwiOiJwcG10ZWFtQHZvZGFmb25lLmNvbSJ9.EWK_8d2MSyUloQsnZxgGHRASlq9HdFLHuJgdC4ZqOvg8CiX5m3b1lqeIqb6HWkBUXpGSThqhqMmoKTmKql4VIGsWdfPM0h4gOyVOTEgsigG2GU86J6IkOogP4F0uR_qoG5daHsFwRiPzSYIskAd3yJQ53a4L8P_uTmaUeb5JcBOvXvp9r9HSp_iGPVL3nJ0zyKzlASkFYIPtuRVrfR1_ilLEOgHLe3B2HCQNdDLlFhlZQbvRKVUmsEZyrLgTXt7wN7RQ9pQRUF7gDPNeevwZTVyqcj5XfjvINpXBqpnZE3OzzQrp5SXbSLhUG8V2Uaw0UcE-e2DdXDsths0YJXneqQ",
					"Content-Type" : "application/json",
					"User-Agent" : "servicenow"
				}
			})
        ]);
		   
        var data = await Promise.all(res.map(r => r.json()));
	var response=data.flat();
        console.log(response);
	   console.log(JSON.stringify(response[0]));
      } catch {
        throw Error("Promise failed");
      }
};

fetchNames();


If I try to copy and paste it within a catalog client script, I get an error.

find_real_file.png

How should I modify the above script in order SN to be able to execute it?

I would be grateful for your assistance.

Regards,
Smith.

7 REPLIES 7

Hi,

You should be able to do this, probably with a Script Include but also a business rule or event.

You set up the API calls in the script include and trigger it, you can wait for all the calls to finish processing before accessing the response.

Fetch the response for each call and put them all into one object. Ofcourse API calls are very possible to do in ServiceNow, so with this approach I cant see why you cant get all the data you want into one object.

 

 

Hi Dan,

 

how can I do it in a script include to make the four API calls in parallel?

 

I don't want them sequentially but in parallel.


Sagar Agarwal
Mega Guru

Hi @Smith Johnson 

 

I'll suggest converting your ES6+ code using something like Bable and then creating a UI Script to store your code and then pulling it in your catalog client script to execute.

 

Another thing you can do is make your call using ServiceNow REST API (doc link), however, to do that first you'll have to build a Glide ajax functionality to call the code on the server-side and inturn execute your external call.

 

If my answer helped you in any way, please then mark it as helpful.

Kind regards,

Sagar