loadUserInfo加载用户信息等函数不理解
来源:4-8 通用导航开发(逻辑层)
暮色如虹
2017-11-27
我对这张的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 });
就这些吧,希望我的表达还算清除。
132017-11-27
相似问题