Javascript 从使用fetch的函数返回承诺
我的问题是我每隔x秒调用一次刷新令牌函数,我在刷新令牌函数中硬编码了到主页的导航 执行导航时,无法清除函数中的间隔,因为间隔在另一个文件中声明 我想要的是从其他文件调用refreshToken并返回承诺 是否需要将用户导航到主页(如果响应访问令牌或刷新令牌为空,则导航到主页),如果是,则清除间隔并在此之后导航 下面是methods.js中的refreshToken函数:Javascript 从使用fetch的函数返回承诺,javascript,ecmascript-6,nativescript,es6-promise,fetch-api,Javascript,Ecmascript 6,Nativescript,Es6 Promise,Fetch Api,我的问题是我每隔x秒调用一次刷新令牌函数,我在刷新令牌函数中硬编码了到主页的导航 执行导航时,无法清除函数中的间隔,因为间隔在另一个文件中声明 我想要的是从其他文件调用refreshToken并返回承诺 是否需要将用户导航到主页(如果响应访问令牌或刷新令牌为空,则导航到主页),如果是,则清除间隔并在此之后导航 下面是methods.js中的refreshToken函数: let refreshToken=(url,refresh_token)=>{ console.log("access
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);
从函数返回fetch并写入handle-else条件,否则它将中断
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) {
return 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
});
}
})
} else {
// .then will throw an error if not write
return new Promise(resolve => resolve( /*Some Data*/ ));
}
}
从函数中返回承诺,然后执行
.then(data=>{if(!data.token){clearInterval();navigate();}}).catch(console.error)
在另一个模块中的部分。@Bergi我的问题是如何从函数中返回承诺在这种情况下,我知道如何使用,然后在承诺链前面放一个Return
?