fetch添加超时时间
其实为fetch添加超时时间很简单,需要用到Promise.race()
方法.
Promise.race()
方法将多个Promise
包装成一个新的Promise
实例.
var p = Promise.race([p1,p2,p3]);
上面的代码中,只要p1,p2,p3中有一个实例先改变状态,p的状态就跟着改变,而那个率先改变的Promise实例返回值就传递给p的回调函数.
Promise.race
方法的参数如果不是Promise
实例,就会先先调用Promise.resolve
方法,将参数转为Promise
实例,再进一步处理.
上完整实例代码:
Promise.race([
fetch(URL),
new Promise(function(resolve,reject){
setTimeout(()=> reject(new Error('request timeout')),2000)
})])
.then((data)=>{
//请求成功
}).catch(()=>{
//请求失败
});
代码中用Promise.race()
将fetch和一个新的Promise
包装在了一起,新的Promise
和fetch
谁率先返回就把该Promise
实例返回值传递给下面的.then()
或者是.catch()
代码里我们新建的Promise
实例里设置了超时时间2000毫秒,如果超过2000毫秒fetch的请求还没有结束,这时已经达到了新的Promise的超时时间,就会返回请求失败,从而触发catch
方法里指定的回调函数.