我目前正在使用他们的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;
hacknews-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;
}
答案 0 :(得分:1)
您可以在数组上使用Array.prototype.map()
而不是对象。
map()
方法创建一个新数组,其中包含调用a的结果 为调用数组中的每个元素提供了函数。
示例强>
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
}
}