当前位置: 首页 > 知识库问答 >
问题:

反应本机:可能未处理的promise拒绝

浦修文
2023-03-14

我得到以下错误:

可能的未处理promise拒绝(id:0:网络请求失败)

这是promise代码,我看不出有什么问题,有什么想法吗?

  return fetch(url)
    .then(function(response){
      return response.json();
    })
    .then(function(json){
      return {
        city: json.name,
        temperature: kelvinToF(json.main.temp),
        description: _.capitalize(json.weather[0].description)
      }
    })
    .catch(function(error) {
    console.log('There has been a problem with your fetch operation: ' + error.message);
    });
}

编辑:

我添加了一个catch函数,得到了一个更好的错误:

您传递了一个未定义或空状态对象;相反,使用forceUpdate()。index.ios.js:64未定义的

这是索引。网间网操作系统。js代码。url很好,并为我提供了正确的json数据。我可以通过控制台日志看到这两个区域。纬度和地区。经度Api(region.latitude,region.longitude)中提供。但是数据未定义。

我仍然不确定发生了什么,为什么data有问题,为什么它是未定义的。

// var React = require('react-native'); --deprecated

// updated
import React from 'react';

// updated
import {
  AppRegistry,
  MapView,
  View,
  Text,
  StyleSheet,
} from 'react-native';

/*
var {
  AppRegistry,
  MapView,
  View,
  Text,
  StyleSheet
} = React;
*/ // -- depreciated 


var Api = require('./src/api');

var Weather = React.createClass({
  getInitialState: function() {
    return {
      pin: {
        latitude: 0,
        longitude: 0
      },
      city: '',
      temperature: '',
      description: ''
    };
  },
  render: function() {
    return <View style={styles.container}>
      <MapView
        annotations={[this.state.pin]}
        onRegionChangeComplete={this.onRegionChangeComplete}
        style={styles.map}>
      </MapView>
      <View style={styles.textWrapper}>
        <Text style={styles.text}>{this.state.city}</Text>
        <Text style={styles.text}>{this.state.temperature}</Text>
        <Text style={styles.text}>{this.state.description}</Text>
      </View>
    </View>
  },
  onRegionChangeComplete: function(region) {
    this.setState({
      pin: {
        longitude: region.longitude,
        latitude: region.latitude
      }
    });

    Api(region.latitude, region.longitude)
      .then((data) => {
        console.log(data);
        this.setState(data);
      });
  }
});


        

var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'stretch',
    backgroundColor: '#F5FCFF'
  },
  map: {
    flex: 2,
    marginTop: 30
  },
  textWrapper: {
    flex: 1,
    alignItems: 'center'
  },
  text: {
    fontSize: 30
  }
});

AppRegistry.registerComponent('weather', () => Weather);

共有3个答案

漆雕兴平
2023-03-14

根据这篇文章,你应该在XCode中启用它。

  1. 在Project Navigator中点击您的项目
  2. 打开信息选项卡
  3. 点击向左的向下箭头到应用传输安全设置
  4. 右键点击应用传输安全设置,选择添加行
  5. 对于创建的行,设置键"允许任意加载",键入布尔值为YES。
宰父子安
2023-03-14

您应该将catch()添加到Api调用的末尾。当代码命中catch()时,它不会返回任何内容,因此当您尝试对其使用setState()时,数据是未定义的。错误消息实际上也告诉您:)

百里承业
2023-03-14

api中的catch函数应该返回一些可以由React类中的api调用处理的数据,或者抛出新的错误,这些错误应该使用React类代码中的catch函数捕获。后一种方法应类似于:

return fetch(url)
.then(function(response){
  return response.json();
})
.then(function(json){
  return {
    city: json.name,
    temperature: kelvinToF(json.main.temp),
    description: _.capitalize(json.weather[0].description)
  }
})
.catch(function(error) {
console.log('There has been a problem with your fetch operation: ' + error.message);
 // ADD THIS THROW error
  throw error;
});

然后在你的React类中:

Api(region.latitude, region.longitude)
  .then((data) => {
    console.log(data);
    this.setState(data);
  }).catch((error)=>{
     console.log("Api call error");
     alert(error.message);
  });
 类似资料:
  • 我在react native中的这个简单api调用有问题,我不知道为什么。我在reactJs上做了完全相同的事情,它在浏览器上运行得非常好。 常量FlatListGames=({导航})= [未处理的promise拒绝:错误:网络错误] node\u modules/axios/lib/core/enhanceError。js:24:11错误。toJSON node_modules/axios/l

  • 我想在Repl上为我的游戏实现一个基本的排行榜。它,所以我创建了一个节点。js后端。这是我在后端的配置: 但是每当我尝试发布时,我都会得到以下错误: (节点:344)未处理的PromisejectionWarning:TypeError:无法读取null的属性“push” (节点:344)UnhandledPromiseRejtionWarning:未处理的promise拒绝。这个错误要么是由于抛

  • 当我运行部署我的应用程序的命令时,我发现以下错误 (节点: 6292)UnhandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHan

  • 我目前正在创建一个食品订购系统,我正在尝试在一个反应原生项目上建立Firebase 该应用程序允许我使用firebase的身份验证,我可以成功登录并注册新用户,但它不允许我使用firestore我正在尝试在my中的以下代码中进行控制台日志,以查看firestore是否将与该应用程序一起运行 下面是该应用程序的列表。js/我调用firestore集合的屏幕 错误如下所示 Firebase错误//错误

  • 为了学习角度2,我正在尝试他们的教程。 我得到这样的错误: 我在SO中浏览了不同的问题和答案,但没有发现什么是“未处理的promise拒绝”。 有人能简单地解释一下它是什么,以及<code>错误:生成cmd ENOENT</code>是什么,当它出现时,我需要检查什么才能消除这个警告吗?

  • 问题内容: 我有AngularJS的代码: 在AngularJS 1.5.9中,当我在以下部分中出现错误时: 我收到明确的错误消息: TypeError:无法读取null的属性“ y” 但是在具有相同代码的1.6版中,我得到了一个不同的错误: 可能未处理的拒绝:{}未定义 我知道这与此更改有关,并且单个解决方案通过添加block 非常简单: 现在我又有了我想要的东西: TypeError:无法读取