Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重试获取请求不成功';我什么也不退_Javascript_Node.js_Fetch_Node Fetch - Fatal编程技术网

Javascript 重试获取请求不成功';我什么也不退

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

这是当前的代码,也是我想到的:

函数getToken(){ 返回新承诺(异步(解析、拒绝)=>{ 试一试{ let res=等待获取(url); 如果(资源状态===418){ 设置超时(getToken,1000); }否则{ let token=wait res.text(); console.log(“1”,令牌); 解析(令牌); } }捕获(e){ 拒绝(e); } }); } 异步函数测试(){ 让令牌=等待getToken(); console.log(“2”,令牌); } test(); 它记录
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
inside
test
将始终是未定义的

功能睡眠(毫秒){
返回新承诺(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我的坏,在下一次编辑中修复