我收到以下错误:Possible unhandled promise rejection (id:0: Network request failed
这是承诺代码,我不知道这里有什么问题,任何想法?
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函数并得到了更好的错误You passed an undefined or null state object; instead, use forceUpdate(). index.ios.js:64 undefined
这是index.ios.js代码。网址很好,并给我正确的json数据。我可以在控制台日志中看到region.latitude
和region.longitude
都可用Api(region.latitude, region.longitude)
。但data
未定义。我仍然不确定发生了什么,为什么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);
答案 0 :(得分:35)
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);
});
答案 1 :(得分:3)
您应该将catch()添加到Api调用的末尾。当你的代码命中catch()它没有返回任何东西时,所以当你尝试在它上面使用setState()时数据是未定义的。错误消息实际上也告诉你:)
答案 2 :(得分:3)
根据this post,您应该在XCode中启用它。
答案 3 :(得分:2)
在此添加我的经验,希望可以帮助某人。
我在使用热重载的Linux上的Android模拟器上遇到了同样的问题。根据接受的答案,代码是正确的,模拟器可以到达互联网(我需要一个域名)。
手动刷新应用程序使其正常工作。所以它可能与热重装有关。
答案 4 :(得分:0)
删除构建文件夹projectfile\android\app\build
并运行项目
答案 5 :(得分:0)
就我而言,我正在IP 127.0.0.1:8000
中运行本地Django后端
随着世博会的开始。
只要确保您没有public domain
中的服务器就可以在您的计算机上正常托管