gpt4 book ai didi

react-native - 如何使用 setTimeout 来中断 native react 中的获取请求?

转载 作者:行者123 更新时间:2023-12-04 01:45:07 25 4
gpt4 key购买 nike

我正在尝试通过获取请求从服务器获取一些数据。有时网络会失败或发生类似的其他事情,我希望有一个超时以防止进一步的错误并获得更好的体验。

实际上我想等待 20 秒,如果我没有收到任何响应,我想显示一个错误并中断获取请求。

我有一个加载模式,我可以通过超时关闭它,但我也想中断获取请求。

这是我的获取请求代码:

_testPress = async () => { 
//setTimeout(() => {this.setState({loading: false})}, 20000)
this.setState({loading : true})
fetch(getInitUrl('loginUser'), {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
password : this.state.password,
email : this.state.emailAddress,
}),
}).then(response => Promise.all([response.ok, response.status ,response.json()]))
.then(([responseOk,responseStatus, body]) => {
if (responseOk) {
//console.log(responseOk, body);
this._signInAsync(body.token);
// handle success case
} else {
console.log(responseStatus);
this.setState({
showAlert : true,
alertType : true,
alertMessage : body.message
});
}
})
.catch(error => {
console.error(error);
// catches error case and if fetch itself rejects
});
}

我使用 setTimeout 关闭加载模块,但它不会停止我希望它在 20 秒后停止的实际请求。

请帮我出出主意。谢谢。

最佳答案

没有可以添加到 fetch 的标准参数,但您可以解决以下问题:

// creating a wrapper for promises
function timeout(milliseconds, promise) {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error("timeout exceeded"))
}, milliseconds)
promise.then(resolve, reject)
})
}

// using that wrapper with fetch
timeout(1000, fetch('/api'))
.then(function(response) {
// response success
}).catch(function(error) {
// timeout error or server error
})

示例:

超时:

// creating a wrapper for promises
function timeout(milliseconds, promise) {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error("timeout exceeded"))
}, milliseconds);

promise.then(resolve, reject);
});
}

const requestErr = new Promise((resolve, reject) => {
setTimeout(() => {
// request finished.
resolve();
}, 2500);
})

timeout(1000, requestErr)
.then(function(response) {
console.log("OK!");
}).catch(function(error) {
console.log("ERROR TIMEOUT!");
});

未超过超时:

// creating a wrapper for promises
function timeout(milliseconds, promise) {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error("timeout exceeded"))
}, milliseconds);

promise.then(resolve, reject);
});
}

const requestOk = new Promise((resolve, reject) => {
setTimeout(() => {
// request finished.
resolve();
}, 500);
})

timeout(1000, requestOk)
.then(function(response) {
console.log("OK!");
}).catch(function(error) {
console.log("ERROR TIMEOUT!");
});

您还可以使用 AXIOS有自己的超时设置。

关于react-native - 如何使用 setTimeout 来中断 native react 中的获取请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55592879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com