HI,
Is it possible to use the standard addon.httpClient with promises in ACE?
I’m afraid not, as it uses Request, which does not support promises.
From the readme:
ACE bundles and extends the request HTTP client. To make a JWT signed request back to the host, all you have to do is use
request
the way it was designed, but use a URL back to the host’s REST APIs.
BTW: it should not be hard to overwrite the addon.httpClient
method and promisify it.
Thanks @remie
Ended up wrapping the request calls with a promisify function as detailed here: Jira-issue-field-demo returning undefined is not a valid argument
It works!
export async function getAllProjects(userAccountId, httpClient) {
let data;
return new Promise((resolve, reject) => {
httpClient
.asUserByAccountId(userAccountId)
.get("rest/api/3/project?", function(err, response, body) {
data = JSON.parse(body);
if (err) reject(err);
resolve(data);
});
return data;
});
}
An alternative method to make a Promise is to use:
Util | Node.js v19.4.0 Documentation as mentioned in GitHub - request/request: 🏊🏾 Simplified HTTP request client.
Hi @SyedFarhan ,
after using the above-suggested code I am not able to set my global variable value.
check the below code.
async function getAllProjects(req)
{
let data;
return new Promise((resolve, reject) => {
plugin.httpClient(req)
.get("rest/api/3/project?", function(err, response, body)
{
data = JSON.parse(body);
Console.log("Here its showing data value"+data);
if (err) reject(err);
resolve(data);
});
Console.log("Here not showing data value"+data); //data= undefined its coming
return data;
});
}
I am writing something wrong here.
any help on this, please.
what is plugin
the httpClient
I am using above is:
const httpClient = addon.httpClient(req);
then passing it to requests
async function get(req, httpClient){
let data;
return new Promise((resolve, reject) => {
httpClient.httpClient(req)
.get("rest/api/3/project?", function(err, response, body){
data = JSON.parse(body);
console.log("Here its showing data value "+data);
if (err) reject(err);
resolve(data);
});
console.log("Here not showing data value " + data); //data= undefined its coming
return data;
});
}
Can you elaborate what are you doing and share a code sample
You can check in the last console.log statement I am printing values of data but it’s coming undefined.
I have defined data globally before the promise call.
Hi @SyedFarhan why are you returning twice?!
Actually, you should just return with the promise and reject with response error and resolve with (parsed) response body?!
export const getAllProjects( userAccountId, httpClient ) => {
return new Promise( ( resolve, reject ) => {
httpClient
.asUserbyAccountID(userAccountId)
.get( "<url>", ( err, response, body ) => {
if( err ) reject(err);
resolve( JSON.parse(body) )
)}
})
};
This will resolve with the response body.
Best Valentin
FYI: I provided a more detailed solution here: How to get return value from httpClient - Jira Development / Jira Cloud - The Atlassian Developer Community