Reputation: 2516
I'm using fetch to get data from server. I'm unable to set timeout for fetch in case of server didn't respond.
my global fetchData class
fetchGetResp(url, token) {
return fetch(url, {
method: "GET",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
// .then(ApiUtils.checkStatus)
.then(response =>
response.json()
)
.then(responseJson => {
return responseJson
})
.catch(error => {
// console.log(error.headers._bodyText.status);
console.log('touching undefined catch');
return undefined;
});
}
Javascript class where I'm accessing fetchData
let resp = fetchData.fetchGetResp(restUrl, userToken);
resp.then(responseJson => {
// console.log(res);
if (responseJson != '' && responseJson != undefined) {
}
else {
console.log(responseJson);
try {
}
catch (error) {
alert(error.message);
console.log(error + 'from js file');
}
}
//Some if statement
else {
alert('Unable to Process.please try again');
}
})
.catch(error => {
alert(error.message + "Please try again after sometime");
});
Please let us how to implement timeout based on my above approach.
Upvotes: 2
Views: 4089
Reputation: 2795
Fetch does not support for timeout option as of now (29/12/2017) but it is currently under discussion (discussion link).
But there is a way we can define our own wrapper to achieve that according to these documents. link1 link2
Therefore in your case
function timeout(ms, promise) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject(new Error("timeout"))
}, ms);
promise.then(resolve, reject)
})
};
timeout(1000, fetchData.fetchGetResp(restUrl, userToken)).then(responseJson => {
// console.log(res);
if (responseJson != '' && responseJson != undefined) {
}else {
console.log(responseJson);
try {
} catch (error) {
alert(error.message);
console.log(error + 'from js file');
}
}
}).catch(error => {
alert(error.message + "Please try again after sometime");
});
Upvotes: 2