[英]Calling a JS Function with Axios inside it Returns Undefined when called
如果别名为foo
的用户绑定了任何指定角色,则 function isAdmin('foo')
将返回 true 或 false。
这是代码:
export function isAdmin(alias, adminRoleOverride) {
try {
axios.get('https://xxxx.execute-api.us-west-2.amazonaws.com/xxxx/xxxx/' + alias)
.then(function (response) {
var admin = false;
var aliasBoundRoles = response.data; //An array with the roles the alias currently holds.
var adminRolePolicy = ['SuperAdmin', 'Admin', 'Director', 'RegionalManager',
'TrainingManager', 'SiteTrainer', 'SitePOC', 'OutSourceSitePocManager']; //What is considered an admin.
if(adminRoleOverride){
adminRolePolicy = adminRoleOverride;
} //If an array with roles is passed as param, override the default adminRolePolicy.
admin = aliasBoundRoles.some((role) => {
return adminRolePolicy.includes(role);
}); //If any of the aliasBoundRoles is in the adminRolePolicy return true else false.
return admin;
});
} catch (error) {
console.error("Error when attempting to authorize user " + alias + "."
+ "\nError: " + error);
return false;
}
}
我想按如下方式使用 function:
if(isAdmin('foo')){
console.log("YAAAY")
}
.. 但它不会工作,因为当if-block
被评估isAdmin('foo')
仍未定义,尚未返回。
我知道这与 axios 调用是异步的并且需要时间来提取数据这一事实有关。
我怎样才能让它工作,我们将不胜感激任何帮助,如果您有任何关于此的教程,我将不胜感激。
你想做以下事情
export function isAdmin(alias, adminRoleOverride) {
try {
// return the promise
return axios.get('https://xxxx.execute-api.us-west-2.amazonaws.com/xxxx/xxxx/' + alias)
.then(function (response) {
var admin = false;
var aliasBoundRoles = response.data; //An array with the roles the alias currently holds.
var adminRolePolicy = ['SuperAdmin', 'Admin', 'Director', 'RegionalManager',
'TrainingManager', 'SiteTrainer', 'SitePOC', 'OutSourceSitePocManager']; //What is considered an admin.
if(adminRoleOverride){
adminRolePolicy = adminRoleOverride;
} //If an array with roles is passed as param, override the default adminRolePolicy.
admin = aliasBoundRoles.some((role) => {
return adminRolePolicy.includes(role);
}); //If any of the aliasBoundRoles is in the adminRolePolicy return true else false.
return admin;
});
} catch (error) {
console.error("Error when attempting to authorize user " + alias + "."
+ "\nError: " + error);
return Promise.resolve(false);
}
}
然后
// this code should be inside an async function
const hasRoleAdmin = await isAdmin('foo')
if(hasRoleAdmin){
console.log("YAAAY")
}
当涉及 Promise 时获得异步结果的最简单方法是使用异步 function 并等待结果:
async function codeDoingTheCheck() {
const isAuthorized = await isAdmin('foo');
if (isAuthorized) {
console.log("YAAAY")
}
}
请记住, codeDoingTheCheck
现在也是异步的,因此无论调用什么都必须等待其结果(以及调用它等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.