请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师你好,想问下loginAndFetch为什么要两个return

// 登录与获取当前用户信息一起来
        loginAndFetch({ dispatch }, loginData) {
            // 返回这个结果之前,先触发login的action,然后等login有了结果后
            // 再触发fetchCurrentUser的action去获取用户信息,记得要返回用户信息,因为我们要拿到页面上去用的
            return dispatch('login', loginData).then(() => {
               return dispatch('fetchCurrentUser')
            })
        }

这节课讲到了组合action,也就是新写了一个叫loginAndFetch的action,在这里先用dispatch调用了第一个action,也就是login,发起了登录请求,dispatch返回的是promise。所以我们可以在调用完dispatch后,使用then回调,让登录请求触发完毕后再dispatch第二个action,用来获取用户信息。
这个流程我还是比较清楚的,就是看着这里的两层函数,有两个return,看着有点晕。我想请问一下老师,这两个return分别是什么含义,为什么需要这样的两个return呢?是不是我前面理解的流程还不够透彻啊

正在回答

1回答

同学你好 我觉得关键点是 你只要把 dispatch 返回的理解成 Promise 就好了 你可以想象一个普通的 Promise chain 就可以了。

第一个 return 将整个 Promise 返回,在外部就可以使用 loginAndFetch().then() 的调用方式了

第二个 return 将 内部的 Promise 返回,这样在 then 就可以拿到这个 Promise 返回的值了。

0 回复 有任何疑惑可以回复我~
  • “第二个 return 将 内部的 Promise 返回,这样在 then 就可以拿到这个 Promise 返回的值了“这句话指的是在.then()后再.then()里面的回调可以拿到第二个return返回的值,对吗?
    回复 有任何疑惑可以回复我~ 2020-12-18 22:04:27
  • 老师,我有疑问,这个方法的执行顺序不是不是这样,当发起loginAndFetch方法执行的之后,先执行login的请求,当请求返回,then方法里面我们可以拿到postAndCommit方法返回的值,这个时候再去请求当前用户的接口,这个接口成功之后没有返回参数值,所以返回了一个成功的promise状态,然后再执行外层的return,那么loginAndFetch().then((res)=>{})  then方法的参数res应该是login接口返回的参数值才对,为啥他是个undefined  ,如果我想loginAndFetch()的then方法中拿到login的参数,应该怎么写
    回复 有任何疑惑可以回复我~ 2022-04-01 11:41:15
  • 我好像又明白了,因为内层return并没有返回参数值,它最终只会返回一个成功的promise状态,而login方法的then方法返回的就是dispatch('fetchCurrentUser')的状态,所以loginAndFetch()。then()方法中的参数自然就是undefined
    回复 有任何疑惑可以回复我~ 2022-04-01 13:43:58
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号