我正在使用这个reducer,它将一些post对象的json feed形成一组已建立的端点,并将它们加载到数组中。到目前为止,一切都很好,项目可以很好地加载到数组中,我可以访问它们。我遇到的问题是帖子来自不同的来源,我需要按日期对它们进行排序以确保它们以正确的顺序显示,因此我编写了一个小小的匿名排序比较功能,该功能应该能够计算时差和排序相应地。问题是比较函数似乎甚至都不会被调用,因为它甚至不会输出到控制台。
我也尝试了胖箭头功能,但这似乎也无济于事。
const postReducer = (state = {
news: [],
sources: ["posts/feed1", "posts/feed2"]
}, action) => {
switch (action.type) {
case "UPDATE_NEWS":
state.news = [];
state.sources.map((source) => {
fetch(source)
.then(res => res.json())
.then(
(result) => {
result.feed.map((item) => {
state.news.push(item)
}
);
},
(error) => {
console.error("Failed to load post stream at " + source)
}
);
});
// Problem starts here
let sorted = state.news;
sorted.sort(function(a,b){
// Code here seems to do nothing
let value = moment(a.dateTime).valueOf() - moment(b.dateTime).valueOf();
console.error("comparing " + a.dateTime + " vs " + b.dateTime + " with value " + value);
return value;
});
console.log(sorted == state.news); // Always outputs true
break;
}
return state;
};
预期:排序比较功能会执行某些操作。 实际结果:排序比较功能绝对不起作用。
答案 0 :(得分:0)
此问题可能是由于异步代码直到已排序的函数运行后才返回结果所致。这意味着当它尝试执行排序时,没有什么可以排序。
为解决此问题,我将thunk用作处理异步动作的中间件,并使用ES6许诺对数据执行任何操作。
该视频和系列非常有用: