【发布时间】:2018-09-12 12:39:07
【问题描述】:
我的问题是我每隔 x 秒调用一次刷新令牌函数,我在 refreshToken 函数中硬编码导航到主页 并且 can't clear interval 在进行导航时在函数中,因为间隔是在另一个文件中声明的。
我想要的是从其他文件调用 refreshToken 并返回承诺 是否需要将用户导航到主页(如果响应访问令牌或刷新令牌为空,则导航到主页),如果是则清除间隔并在此之后导航。
这是在 methods.js 中的 refreshToken 函数:
let refreshToken=(url,refresh_token)=>{
console.log("access_token check");
let currentMin=getMinute();
if(currentMin===0){
currentMin=60;
}
if(appSettings.getNumber("tkTime") > currentMin){
currentMin=currentMin+60;
}
if(currentMin - appSettings.getNumber("tkTime") >= 4){
fetch(url,{
headers: new Headers({
'Content-Type': 'application/json',
'Authorization':`Bearer ${refresh_token}`
}),
method:'POST'
}).then((res) => {
return res.json();
}).then((data)=>{
if(data.refresh_token !== null || data.access_token !== null){
appSettings.setString("refresh_token",data.refresh_token);
appSettings.setString("access_token",data.access_token);
appSettings.setNumber("tkTime",getMinute());
console.log("token refreshed");
}
else{
topmost().navigate({moduleName:"Home/home",clearHistory: true});
}
})
.catch(error => {
console.log(error);
});
}
}
这是我从 userPage.js 调用此函数时的代码部分:
const myModules = require('~/methods.js');
myModules.refreshToken(myModules.refUrl,appSettings.getString("access_token"),appSettings.getString("refresh_token"));
ref=timer.setInterval(() => {
myModules.refreshToken(myModules.refUrl,appSettings.getString("access_token"),appSettings.getString("refresh_token"));
},1000*30);
【问题讨论】:
-
从函数返回promise,并在另一个模块中做
.then(data => { if (!data.token) { clearInterval(); navigate(); } }).catch(console.error)部分。 -
@Bergi 我的问题是在这种情况下如何从函数中返回承诺,我知道那么热使用
-
只需在你的承诺链前面放一个
return?
标签: javascript ecmascript-6 nativescript es6-promise fetch-api