如何解决重试获取请求不返回任何内容
这是当前的代码和我想出的:
function getToken() {
return new Promise(async (resolve,reject) => {
try {
let res = await fetch(url);
if (res.status === 418) {
setTimeout(getToken,1000);
} else {
let token = await res.text();
console.log("1",token);
resolve(token);
}
} catch(e) {
reject(e);
}
});
}
async function test() {
let token = await getToken();
console.log("2",token);
}
test();
它记录 1 <token>
但它没有像它应该记录的那样记录另一部分 (2 <token>
)。我有什么遗漏或做错了吗?
解决方法
我非常天真的方法是将“睡眠”函数和标准 async/await 语法混合使用(无需将 then
混入其中)。
如果 URL 始终返回 418 http 代码,这不会考虑可能的无限循环。
最需要注意的是,我在重试中返回 getToken()
,并在 else 中返回 token
。如果我们不这样做,token
内的 test
将始终是未定义的。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve,ms));
}
async function getToken() {
try {
let res = await fetch('https://httpstat.us/200');
if (res.status === 418) {
await sleep(1000);
return getToken();
} else {
let token = await res.text();
console.log("1",token);
return token;
}
} catch (e) {}
};
async function test() {
let token = await getToken();
console.log("2",token);
}
test();
,
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve,ms));
}
function get(url,retryStatusCode) {
return new Promise(async (resolve,reject) => {
let found = false;
while (found !== true) {
try {
await sleep(1000);
await fetch(url).then(res => {
let text = res.text();
let status = res.status;
if (status !== retryStatusCode) {
found = true;
resolve(text);
}
});
} catch (error) {
reject(error);
}
}
});
};
然后await get(url,404)
。
然后使用
await fetch(url).then(res=>console.log(res).catch(err=>console.log(err);
我只是在这里记录资源,你可以用它做任何你想做的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。