3 回答
TA贡献1880条经验 获得超4个赞
您使用不当。您需要等待。解决这两个承诺后,响应数据将位于您从 中获取的每个响应对象内部的一个属性中。如果你需要整个响应对象,那么你可以解构它async-awaitPromise.alldataaxios
下面是一个示例
const FetchData = async (): Promise<{ run: string; app: string }> => {
try {
const [response1, response2] = await Promise.all([
axios({
...
}),
axios({
...
})
]);
return {
run: response1,
app: response2
};
} catch (error) {
console.log(error);
}
};
下面是一个从 json 占位符 API 的 2 个终结点获取数据的演示
TA贡献1735条经验 获得超5个赞
您需要更改返回语句的位置:
更新了代码并进行了更改:
const FetchData = (): Promise<{ run: string; app: string }> => {
let aToken:string;
let bToken:string;
// Return the promise here
return Promise.all([
axios({
method: 'post',
url: 'https://oauth2.-arch.mand.com/oauth2/token',
data: qs.stringify({
'grant_type': 'client_credentials'
}, {
'scope': 'run:crud'
}),
headers: {
'Accept': 'application/json',
'Authorization': 'Basic NTgwNjgtMDhhZTczOGNl',
'Content-Type': 'application/x-www-form-urlencoded',
}
}),
axios({
method: 'post',
url: 'https://oauth2.-arch.mand.com/oauth2/token',
data: qs.stringify({
'grant_type': 'client_credentials'
}, {
'scope': 'exe:crud'
}),
headers: {
'Accept': 'application/json',
'Authorization': 'Basic NTgwNjgtMDhhZTczOGNl',
'Content-Type': 'application/x-www-form-urlencoded',
}
})
]).then(axios.spread((...responses: AxiosResponse[]) => {
aToken = responses[0];
bToken = responses[1];
// This return is for getting the data once the promise is resolved either with then or await
return {
run: aToken ,
app: bToken
};
}).catch(function(error: any) {
console.log("Error: " + error);
return error;
});
)}
由于您在承诺解决之前返回值,因此您不会获得任何数据。您需要返回 promise,然后您需要返回所需的数据,以便在调用函数中解析 promise 后获取。
添加回答
举报