React / Redux n00b在这里:) - 使用一个没有正确返回错误代码的糟糕API(即使在结束点关闭时返回200),因此搞乱了我的Ajax调用。 API的所有者将无法尽快纠正此问题,因此我现在必须解决这个问题。
我目前正在使用类似的内容检查每个success
(使用lodash):
success: function(data) {
// check if error is REALLY an error
if (_.isUndefined(data.error) || _.isNull(data.error)) {
if (data.id) data.sessionId = data.id;
if (data.alias) data.alias = data.alias;
resolve(data || {});
} else {
reject(data); // this is an error
}
}
我想将它移到它自己的函数中,以便我可以将它用于执行Ajax调用的任何操作,但我不知道在哪里包含它。
这种类型的函数是否应该映射到状态(因此,将其视为一个动作并构建一个reducer),或者这应该是Redux之外的泛型并抛出main.js
例如?
答案 0 :(得分:2)
您可以根据承诺是否已解决来调度不同的操作。最简单的方法是:
function onSuccess(data) {
return {
type: "FETCH_THING_SUCCESS",
thing: data
};
}
function onError(error) {
return {
type: "FETCH_THING_ERROR",
error: error
};
}
function fetchThing(dispatch, id) {
// the ajax call that returns the promise
fetcher(id)
.then(function(data){
dispatch(onSuccess(data));
})
.catch(function(error) {
dispatch(onError(error));
});
}
还有一些documentation如何做这种事......