所以我试图迭代并映射这个数组并从中提取数据。当试图运行代码时,我得到一个错误说" data.data.children.map(...)。然后不是函数",即使data.data.children是一个数组。谢谢。
var output
fetch('https://www.reddit.com/r/somesubreddit/hot/.json?count=20')
.then(response => response.json())
.then(data => {
//console.log(data.data.children)
data.data.children.map(hit => output = {
score: hit.score,
title: hit.title,
permalink: hit.permalink
}).then(result => {
var done = result.sort(function(a, b) {
return b.score - a.score
})
this.setState({
hits: done
})
})
}).catch(err => console.log(err.message)); // To illustrate your error

答案 0 :(得分:1)
Array.prototype.map
没有返回Promise
。您无法使用.then()
来链接其输出。
.map()
应该是同步的,因此无需使用.then()
。只需立即使用其输出:
var output
fetch('https://www.reddit.com/r/somesubreddit/hot/.json?count=20')
.then(response => response.json())
.then(data => {
console.log(data.data.children)
var result = data.data.children.map(hit => output = {
score: hit.score,
title: hit.title,
permalink: hit.permalink
});
var done = result.sort(function(a, b) {
return b.score - a.score
})
this.setState({
hits: done
})
});
您可以通过链接map
和sort
的输出来进一步简化此操作,以删除中间变量:
var output
fetch('https://www.reddit.com/r/somesubreddit/hot/.json?count=20')
.then(response => response.json())
.then(data => {
console.log(data.data.children)
var result = data.data.children.map(hit => {
score: hit.score,
title: hit.title,
permalink: hit.permalink
}).sort(function(a, b) {
return b.score - a.score
});
this.setState({
hits: result
})
});
请注意,您仅在.then()
来电时使用fetch()
来电,因为Fetch API基于承诺。在fetch之外或其回调中的任何实现默认情况下都不会隐式使用Promises,因此您不能在它们上使用.then()
。
答案 1 :(得分:0)
您有几个错误
.then
方法output = {
...无需output
变量
fetch('https://www.reddit.com/r/somesubreddit/hot/.json?count=20')
.then(response => response.json())
.then(data => data.data.children.map(({data:{score, title, permalink}}) => ({score, title, permalink})))
.then(result => {
var done = result.sort(function(a, b) {
return b.score - a.score
});
/*
this.setState({
hits: done
});
*/
console.log(done);
})
注意:上面也可以写
fetch('https://www.reddit.com/r/somesubreddit/hot/.json?count=20')
.then(response => response.json())
.then(data => {
var done = data.data.children.map(({data:{score, title, permalink}}) => ({score, title, permalink}))
.sort(function(a, b) {
return b.score - a.score
});
/*
this.setState({
hits: done
});
*/
console.log(done);
})
由于.map
不需要在单独的.then
中完成,因为它是同步的