javascript - 仅当错误代码为 403 时才尝试登录
问题描述
我没有 API 检查令牌是否过期。我必须进行 GET 调用,如果我403
从 API 收到错误,那么我应该重新登录。
我尝试过:
app.get = async (body) => {
return new Promise((resolve, reject) => {
let user = await user.findOne({
where: {
accountId: body.accountId
}
});
if(user){
body.accessToken = user.accessToken;
} else {
body.accessToken = await app.login();
}
request(
{
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer ' + body.accessToken
},
method: 'GET',
uri: `${config.acs.url}${body.url}`,
json: true
}
)
.then((response) => {
resolve(response);
})
.catch((error) => {
// logger.info(error);
if(error.statusCode == 403){
body.accessToken = await app.login(); <<-------------
app.get(body);
}
reject(error);
});
});
}
我不知道如何避免这个错误。
SyntaxError: await 仅在
async
函数中有效
我已经有了
app.get = async (body) => { ...
只有当我在错误块中获得 403 代码时才需要重新登录。
如何重新构建我的代码以实现我所描述的?
解决方案
中使用的函数Promise
不是async
函数
试试这个片段
app.get = async (body) => {
let resolve, reject;
const promise = new Promise((re, rj) => {
resolve = re;
reject = rj;
});
let user = await user.findOne({
where: {
accountId: body.accountId
}
});
if(user){
body.accessToken = user.accessToken;
} else {
body.accessToken = await app.login();
}
request(
{
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer ' + body.accessToken
},
method: 'GET',
uri: `${config.acs.url}${body.url}`,
json: true
}
)
.then((response) => {
resolve(response);
})
.catch(async (error) => {
// logger.info(error);
if(error.statusCode == 403){
body.accessToken = await app.login(); <<-------------
app.get(body);
}
reject(error);
});
return promise;
}
推荐阅读
- python - 如何将重叠范围“联合”到非重叠范围?
- java - 我如何从单词的开头和结尾删除撇号,而不是从单词中删除?
- c# - 使用长度相等的字符串数组,使用 LINQ 获取其自己数组中每个字符串的第 n 个字符
- mysql - Mysql从两个表中选择没有关系
- ffmpeg - 如何删除 ffmpeg 中重复的视频帧?但必须做的不是所有的视频,而是几秒钟的部分。
- c# - 如何在运行时运行 SyntaxNode
- firebase - Firebase 令牌过期和处理刷新令牌的最佳实践
- java - 用于生成自定义 IntelliJ toString 方法的速度模板
- c++ - 为visual studio重构出不完整类型的模板
- cucumber - 在黄瓜大纲场景中传递整数列表