Async and promise.All in a catalog client script
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
â03-01-2022 11:59 AM
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.
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.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
â03-02-2022 01:14 AM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
â03-02-2022 01:24 AM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
â03-02-2022 01:44 AM
Hi
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