超时提取-React Native

时间:2018-01-02 07:01:57

标签: javascript reactjs react-native ecmascript-6 promise

我使用fetch API命中休息服务器。如果服务器关闭,我需要将超时设置为30秒,并显示“超时发生”等警告。

我的抓取电话

 fetch('url', {
            method: "POST",
            headers: {

                'Accept': '*/*',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(objReq)
        })
            .then(response => response.text())
            .then(responseJson => {
                if (responseJson != null && responseJson != undefined) {
            })
            .catch(error => {
                alert(error + " from error")
                console.error(error);
            });

我无法正确设置超时。是否有一种简化的方法来实现timeout.Any建议在点击API调用之前检查互联网连接。

1 个答案:

答案 0 :(得分:1)

引用的答案是要走的路,但可能要清理使用部分应用程序(闭包):

const withTimeout = time => promise =>
  Promise.race(
    [
      promise,
      new Promise(
        (resolve,reject)=>
          setTimeout(
            _=>reject("Timeout happened")
            ,time
          )
      )
    ]
  );
const in30Seconds = withTimeout(30000);

in30Seconds(
  fetch('url', {
    method: "POST",
    headers: {
        // 'x-nanobnk-auth': this.token,
        'Accept': '*/*',
        'Content-Type': 'application/json',
    },
    body: JSON.stringify(objReq)
  })
)
  .then(response => response.text())
  .then(responseJson => {
      if (responseJson != null && responseJson != undefined) {

      }
  })
  .catch(error => {
      alert(error + " from error")
      console.error(error);
  });