javascript - 获取超时 - React Native

标签 javascript react-native ecmascript-6 fetch

我正在使用 fetch 从服务器获取数据。如果服务器没有响应,我无法设置获取超时。

我的全局 fetchData 类

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;
    });
}

我正在访问 fetchData 的 Javascript 类

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");
});

请让我们根据我上面的方法如何实现超时。

最佳答案

截至目前(2017 年 12 月 29 日),Fetch 不支持超时选项,但目前正在讨论 (discussion link) .

但是我们可以根据这些文档定义自己的包装器来实现这一点。 link1 link2

因此在你的情况

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");
});

关于javascript - 获取超时 - React Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48017465/

相关文章:

javascript - 通过辅助函数渲染时,我得到 : "Objects are not valid as a React child" error

javascript - 将嵌套对象列表转换为数组的函数

javascript - 解构更改名称并设置默认值

javascript - 基本 jQuery : How to call a user defined function

javascript - 使用 JavaScript 正则表达式在文本中首次出现单词

ios - AppDelegate 使用 Firebase 更新

gulp - babel/6to5 - 导出模块时重复的代码

javascript - Chrome:避免在SPA中使用自动填充密码

javascript - 如何在 python(Django) 中获取 csrf_token

android - firebase.messaging().getInitialNotification() 在 android 上不起作用(当应用程序被杀死时)