首页 文章

React Native Fetch:第二个承诺悬挂

提问于
浏览
6

React Native的fetch存在奇怪的问题 . 它以前工作,不知道我改变了什么,但它已停止工作 .

login(data,success,fail){
    console.log('doing fb login');
    fetch(host+'/api/login?credentials='+data.credentials)
        .then( (response) => {
            console.log('got login response');
            return response.json();
        } )
        .then( json => {
            console.log('got login json');
            if(json.result!='fail'){
                success(json);
            } else {
                fail(json);
            }
            return json;
        })
        .catch((error) => {
          console.warn(error);
        });
}

问题是我看到第一个“获得登录响应”消息,但它只是挂起,没有任何反应,直到我按下触发“登录json”的屏幕并按预期继续 .

令人沮丧的是因为这种情况一直在发生,我无法理解为什么第二个.then()不会自动触发 .

任何帮助深表感谢 .

编辑:发现了一个类似的问题:What could be causing this slow fetch in react native?

似乎已经在考虑:https://github.com/facebook/react-native/issues/6679

此外,只有在Chrome调试工具启用时才会看到这种行为......很有趣

2 回答

  • 0

    response.json() is a promise,不是一个值 . 所以它赢得了't resolve for you. I would also check result based on response.status instead of json.result because for some case server'的回复不会转换为json(例如401) .

    .then( (response) => {
       if (response.status >= 200 && response.status < 300) {
          response.json().then((data) => success(data));
       } else {
          fail(response);
       }
    })
    
  • -1

    console.log是一个阻止语句 . 一个同步停止代码,直到它被解析但使用Chrome调试,当选项卡不在前台时,它可能会很慢 .

相关问题