Javascript 重试获取请求不成功';我什么也不退
这是当前的代码,也是我想到的: 函数getToken(){ 返回新承诺(异步(解析、拒绝)=>{ 试一试{ let res=等待获取(url); 如果(资源状态===418){ 设置超时(getToken,1000); }否则{ let token=wait res.text(); console.log(“1”,令牌); 解析(令牌); } }捕获(e){ 拒绝(e); } }); } 异步函数测试(){ 让令牌=等待getToken(); console.log(“2”,令牌); } test(); 它记录Javascript 重试获取请求不成功';我什么也不退,javascript,node.js,fetch,node-fetch,Javascript,Node.js,Fetch,Node Fetch,这是当前的代码,也是我想到的: 函数getToken(){ 返回新承诺(异步(解析、拒绝)=>{ 试一试{ let res=等待获取(url); 如果(资源状态===418){ 设置超时(getToken,1000); }否则{ let token=wait res.text(); console.log(“1”,令牌); 解析(令牌); } }捕获(e){ 拒绝(e); } }); } 异步函数测试(){ 让令牌=等待getToken(); console.log(“2”,令牌); } tes
1
,但它不记录它应该记录的其他部分(2
)。我有什么遗漏或做错了吗?然后使用
await fetch(url).then(res=>console.log(res).catch(err=>console.log(err);
我只是在这里记录res,你可以用它做任何你想做的事情{
返回新承诺(resolve=>setTimeout(resolve,ms));
}
函数get(url、retryStatusCode){
返回新承诺(异步(解析、拒绝)=>{
让发现=错误;
while(找到!==true){
试一试{
等待睡眠(1000);
等待获取(url)。然后(res=>{
设text=res.text();
让状态=res.status;
如果(状态!==retryStatusCode){
发现=真;
决议(文本);
}
});
}捕获(错误){
拒绝(错误);
}
}
});
};
然后await-get(url,404)
我非常天真的方法是混合使用“sleep”函数和标准的异步/await语法(无需将然后混入其中)
如果URL始终返回418 http代码,则这不会考虑可能的无限循环
最需要注意的是,我在retry中返回getToken()
,在else中也返回token
。如果我们不这样做,token
insidetest
将始终是未定义的
功能睡眠(毫秒){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
异步函数getToken(){
试一试{
let res=等待取数('https://httpstat.us/200');
如果(资源状态===418){
等待睡眠(1000);
返回getToken();
}否则{
let token=wait res.text();
console.log(“1”,令牌);
返回令牌;
}
}捕获(e){}
};
异步函数测试(){
让令牌=等待getToken();
console.log(“2”,令牌);
}
test()
新承诺(异步(
似乎是多余的?一个异步
函数将返回一个承诺,使用418在2021年似乎很神秘。用例是什么?如果我不使用Promise,它将记录2 undefined
@Wolfy如果您返回令牌怎么办?我认为您缺少了一个)
在你的第一个console.log之后,第二个console.log之后(同样……考虑到你正在等待fetch()…没有太多的理由使用.then/.catch)是的,我看到了我的错误为什么在然后
中放了一个异步函数?@evolutionxbox我的坏,在下一次编辑中修复