繁体   English   中英

反应本机获取不调用然后或捕获

[英]react native fetch not calling then or catch

我正在使用fetch在react-native中进行一些API调用,有时随机fetch不会向服务器发送请求,而我的then或except块也不会被调用。 这是随机发生的,我认为可能存在竞争条件或类似情况。 在这样的请求失败后,对同一API的请求永远不会被解雇,直到我重新加载应用程序。 任何想法如何追踪这背后的原因。 我使用的代码如下。

const host = liveBaseHost;
const url = `${host}${route}?observer_id=${user._id}`;
let options = Object.assign({
        method: verb
    }, params
    ? {
        body: JSON.stringify(params)
    }
    : null);
options.headers = NimbusApi.headers(user)
return fetch(url, options).then(resp => {
    let json = resp.json();
    if (resp.ok) {
        return json
    }
    return json.then(err => {
        throw err
    });
}).then(json => json);

Fetch可能会抛出错误而您没有添加catch块。 尝试这个:

return fetch(url, options)
  .then((resp) => {
    if (resp.ok) {
      return resp.json()
        .then((responseData) => {
          return responseData;
        });
    }
    return resp.json()
      .then((error) => {
        return Promise.reject(error);
      });
  })
  .catch(err => {/* catch the error here */});

请记住,Promises通常具有以下格式:

promise(params)
  .then(resp => { /* This callback is called is promise is resolved */ },
        cause => {/* This callback is called if primise is rejected */})
  .catch(error => { /* This callback is called if an unmanaged error is thrown */ });

我正在以这种方式使用它,因为我之前遇到过同样的问题。

如果它对您有帮助,请告诉我。

将您的fetch包装在try-catch中:

let res;
try {
    res = fetch();
} catch(err) {
    console.error('err.message:', err.message);
}

如果您看到“网络故障错误”,它可能是CORS或非常有趣的,但它过去让我,检查您是否处于飞行模式。

我也陷入了困境,api电话既没有进入当时,也没有进入捕获。 确保您的手机和开发代码已连接到同一个Internet网络,这对我来说很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM