Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么redux thunk的回归承诺?_Javascript_Reactjs_Redux_Middleware_Redux Thunk - Fatal编程技术网

Javascript 为什么redux thunk的回归承诺?

Javascript 为什么redux thunk的回归承诺?,javascript,reactjs,redux,middleware,redux-thunk,Javascript,Reactjs,Redux,Middleware,Redux Thunk,作为一名初学者,我正在学习redux thunk中间件,我不明白为什么这个函数(由redux thunk返回)返回一个承诺(由fetch()返回) 我试着不归还任何东西,但它成功了,那么我们为什么要归还它呢 export function getCourses() { return fetch(baseUrl) .then(handleResponse) .catch(handleError); } export function loadCourses() { ret

作为一名初学者,我正在学习redux thunk中间件,我不明白为什么这个函数(由redux thunk返回)返回一个承诺(由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()操作


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

其次,函数返回一个承诺,这是因为您编写了对API函数的调用(包装在承诺中,在函数完成时不返回回调)


如果希望获得API调用的实际结果,则应使用Async/Await语法

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

其次,函数返回一个承诺,这是因为您编写了对API函数的调用(包装在承诺中,在函数完成时不返回回调)


如果希望获得API调用的实际结果,则应使用Async/Await语法

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

Thunks是基本Redux副作用逻辑的推荐中间件,包括需要访问存储的复杂同步逻辑,以及简单的异步逻辑(如AJAX请求)

thunk中间件知道如何将thunk异步操作转换为操作,因此您只需将简单的_action()设置为thunk,如果中间件看到正常操作,thunk中间件将为您完成这项工作,他会将此操作作为普通操作分派,但如果它是异步函数,则会将您的异步操作转变为普通操作


您还可以看到

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

Thunks是基本Redux副作用逻辑的推荐中间件,包括需要访问存储的复杂同步逻辑,以及简单的异步逻辑(如AJAX请求)

thunk中间件知道如何将thunk异步操作转换为操作,因此您只需将简单的_action()设置为thunk,如果中间件看到正常操作,thunk中间件将为您完成这项工作,他会将此操作作为普通操作分派,但如果它是异步函数,则会将您的异步操作转变为普通操作

你也可以看到

我想我(从一位同事那里)得到了答案

如果你想连锁某些活动,你的行动需要回报一个承诺

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

我想我(从一位同事那里)得到了答案

如果你想连锁某些活动,你的行动需要回报一个承诺


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

你的确切功能是什么
loadCourses
或嵌套的匿名
函数(dispatch)
?下面是一个很好的示例,展示了(返回承诺)的实际作用:(请参见第一条注释)。您所指的确切函数是什么
loadCourses
或嵌套的匿名
函数(dispatch)
?下面是一个很好的例子,说明了(返回承诺)的作用:(参见第一条注释)。我认为这一行
会将异步动作转换为正常动作
有点误导。thunk MW所做的一切就是使用
dispatch
getState
和可选的额外参数调用thunk(函数),并返回thunk返回的内容。我认为
这一行将异步操作转换为正常操作
有点误导。thunk MW所做的就是使用
dispatch
getState
调用thunk(一个函数),并可以选择传递额外的参数,然后返回thunk返回的内容。
function MyComponent(props){
    .......
    useEffect(() => {
        loadCourses()
    });

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