使用React Native Fetch中的对象响应时未处理的Promise Rejection
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用React Native Fetch中的对象响应时未处理的Promise Rejection相关的知识,希望对你有一定的参考价值。
我目前正在使用他们的Official API在React Native中构建一个黑客新闻阅读客户端
我想展示当天的头条新闻。首先,我获得当天热门帖子的ID,然后使用此ID来获取故事。
但是当我运行这个时,承诺会被ids.map is undefined
拒绝。
我怎样才能解决这个问题 ?
FeedScreen.js
import { getTopStoriesID, getStoriesByID } from '../../hacknews-api';
class FeedScreen extends Component {
constructor(props) {
super(props);
this.state = {
loaded: false,
stories: [],
};
}
async componentDidMount() {
const storiesID = await getTopStoriesID();
const stories = await getStoriesByID(storiesID[10]);
this.setState({ stories });
}
render() {
return <Text>{this.state.stories}</Text>;
}
}
export default FeedScreen;
黑客新闻-api.js
const BASE_URL = 'https://hacker-news.firebaseio.com/v0';
export const getTopStoriesID = async () => {
const res = await fetch(BASE_URL + '/topstories.json');
const storiesID = await res.json();
return storiesID;
};
export const getStoriesByID = async (ids) => {
const res = await Promise.all(ids.map(async (id) => {
const res = await fetch(BASE_URL + `/item/{id}.json`)
const story = await res.json();
return story;
}));
const stories = await res.json();
return stories;
}
答案
您可以在数组上使用Array.prototype.map()
而不是对象。
map()
方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。
例
export const getStoriesByID = async (ids) => {
// check if the argument is defined and its an Array
if(ids && ids.constructor === Array) {
// do something with array of ids, for example do a map()
} else {
// do something otherwise
}
}
以上是关于使用React Native Fetch中的对象响应时未处理的Promise Rejection的主要内容,如果未能解决你的问题,请参考以下文章