【发布时间】:2018-06-29 10:16:36
【问题描述】:
我是使用 redux 的新手,我正在尝试将 redux-promise 设置为中间件。我有这种情况,我似乎无法开始工作(当我只是想在没有链接的情况下进行一个异步调用时,事情对我有用)
假设我有两个 API 调用:
1) getItem(someId) -> {attr1: something, attr2: something, tagIds: [...]}
2) getTags() -> [{someTagObject1}, {someTagObject2}]
我需要调用第一个,并获取一个项目,然后获取所有标签,然后返回一个包含项目和与该项目相关的标签的对象。
现在,我的动作创建者是这样的:
export function fetchTagsForItem(id = null, params = new Map()) {
return {
type: FETCH_ITEM_INFO,
payload: getItem(...) // some axios call
.then(item => getTags() // gets all tags
.then(tags => toItemDetails(tags.data, item.data)))
}
}
我在toItemDetails中有一个console.log,我可以看到当调用完成后,我们最终进入toItemDetails并得到正确的信息。但是,看起来我们在调用完成之前就到达了减速器,而我只是从减速器获得了一个未定义的有效负载(它不会再试一次)。对于这种情况,reducer 只是试图返回 action.payload。
我知道链接调用不是很好,但我至少希望看到它工作。这是可以通过 redux-promise 完成的吗?如果没有,任何有关如何实现此功能的示例将不胜感激!
【问题讨论】:
-
为什么说链式调用不好?当你有一个依赖于前一个异步行为结果的异步行为时,它们是绝对必要的。
-
你能通过一个异步调用发布有效的版本吗?
标签: redux react-redux redux-promise