为什么redux thunk会回报承诺?

时间:2019-08-25 11:13:44

标签: javascript reactjs redux middleware redux-thunk

我正在学习redux-thunk中间件作为初学者的反应开发人员,但我不明白为什么函数(由redux-thunk返回)返回一个promise(由fetch()返回)

我试图不退回任何东西,但是它起作用了,那么为什么我们退回它呢?

export function getCourses() {
  return fetch(baseUrl)
    .then(handleResponse)
    .catch(handleError);
}

export function loadCourses() {
  return function(dispatch) {
    dispatch(beginApiCall());// dispatch some synchronous action

    return courseApi
      .getCourses().then(courses => {
        dispatch(loadCourseSuccess(courses));
      }).catch(error => {throw error;});
  };
}  

对于名为MyComponent的组件,分派loadCourses()操作

function MyComponent(props){
    .......
    useEffect(() => {
        loadCourses()
    });

    const mapDispatchToProps = {
        loadCourses,
        .....
    }
}

3 个答案:

答案 0 :(得分:1)

好吧,首先函数返回一些数据,因为您要求它返回某种结果return function(dispatch) {...}。 如果要忽略返回的结果,只需从return中删除return function(dispatch) {...}

其次,由于您编写对API函数的调用的方式(包装在promise中,并且在函数完成时不返回回调),因此该函数返回Promise。

如果要获取API调用的实际结果,则应使用Async / Await语法。

答案 1 :(得分:1)

我想我从同事那里得到了答案。

如果您要链接某些活动,则您的操作将需要返回一个Promise。

这是在返回结果后允许链接活动的好方法!

答案 2 :(得分:0)

使用普通的基本Redux存储,您只能通过调度操作来进行简单的同步更新。中间件扩展了商店的功能,并允许您编写与商店交互的异步逻辑。

Thunk是基本Redux副作用逻辑的推荐中间件,其中包括需要访问存储的复杂同步逻辑以及诸如AJAX请求之类的简单异步逻辑。https://github.com/gaearon/redux-thunk

thunk中间件知道如何将thunk异步动作转换为动作,因此您只需要使simple_action()成为thunk,然后thunk中间件就可以为您完成工作,如果中间件看到正常的动作,会将该操作作为正常操作进行调度,但是如果它是异步功能,则会将您的异步操作转换为正常操作。

您还可以看到return promise from store after redux thunk dispatch