请稍等 ...
×

采纳答案成功!

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

loadUserInfo加载用户信息等函数不理解

我对这张的loadUserInfo等函数都不是很理解,不清楚各个函数之间的执行顺序.

以loadUserInfo为例,它涉及到了_user.checkLogin和_mm.request

_mm.request中又有ajax,老师能不能以加载用户信息成功为例,告诉我整个函数的调用流程呢?

其中的细节,也不懂,如_mm.request中,Ajax请求成功,会执行到success的方法.

if (0 === res.status) {
typeof param.success === 'function' && param.success(res.data, res.msg);
}

加入,后端返回了用户信息status=0,先拿到param.success的类型,判断其实一个function 然后param.success(res.data, res.msg)语句是给调用者返回数据吗,给_user.checkLogin中resolve=res.data reject=res.msg?

接下来回到loadUserInfo,res赋值为resolve errMsg=reject?

这种调用方式是叫回调函数吗?

前端知识懂得不多.老师辛苦了!

正在回答

1回答

可能是对这个接口有点不理解,这个接口的作用主要是检查登录信息,但还可以在登录情况下获取到用户信息,在service里把这个接口就叫了checkLogin。

在页面里,loadUserInfo方法就是为了加载用户信息显示在导航条上,但调用的是checkLogin方法,也就是_user.checkLogin()来获取用户信息。_user在最上面看其实就是user-service,这里service的作用是做一个中间层,不在业务里直接和数据去交互,也是分层的结构。service里面的checkLogin方法才是调用ajax请求来请求后端数据,这个请求方法被我们封装在了_mm.request里(_mm就是通用工具),所以在user-service里会调用_mm.request()方法。

ajax成功了,调用了param.success,这个方法是从param对象传进来的,这就是回调,然后传给回调两个参数(res.data, res.msg),这两个参数都是resolve的,如果是失败就是给param.error传回去一个res.msg参数。

最后,我猜你的疑问主要在这了,调用的res.success到底是谁,我们在user-service的checkLogin方法里可以看到调用request时候传进去的success其实是传进service的resolve,这时候再追回到page部分的loadUserInfo,我们调用checkLogin方法时是传进去两个匿名函数,也就是两个function,那第一个function就是最后的success,所以回调的最终地方就是第一个function。这个function只用了一个res函数,是因为这个接口里我们不需要msg,就只拿res就够了。假如是需要msg的地方,就应该是下面这样的结构:

_user.checkLogin(function(res, msg){
    console.log(msg);
}, function(errMsg){
    // do nothing
});


就这些吧,希望我的表达还算清除。

1 回复 有任何疑惑可以回复我~
  • 提问者 暮色如虹 #1
    非常感谢!结合您的回答,反复看了代码,终于明白了!
    回复 有任何疑惑可以回复我~ 2017-11-27 20:57:07
  • 提问者 暮色如虹 #2
    我提问时,相当疑惑的问题是:param.success(res.data, res.msg) 
    现在知道,param是包含{url:'',success:''}的对象,param.success是对象.属性赋值.
    
    最开始我把上面的语法被我理解成了类似java中this.assembleProductVo(int a, int b);
    我就在想,这param参数怎么还有success方法,难道是内置的方法......
    
    再次感谢老师的精彩回复,茅塞顿开,犹如打通任督二脉~~~
    回复 有任何疑惑可以回复我~ 2017-11-27 21:12:12
  • Rosen 回复 提问者 暮色如虹 #3
    前后通吃,棒棒的!
    回复 有任何疑惑可以回复我~ 2017-11-27 21:23:20
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

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

帮助反馈 APP下载

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

公众号

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