关于fetchAccessToken()方法的问题
来源:
杨洋1989
2016-08-21
老师在构造fetchAccessToken()方法时,前半部分这段代码:
if(this.access_token && this.expires_in){ if(this.isValidAccessToken(this)){ return Promise.resolve(this); } }
在条件成立时可以令fetchAccessToken()方法返回一个promise对象,但是后半部分代码:
this.getAccessToken() .then(function(data){ try{ data = JSON.parse(data); //从外部文件获取的数据都是字符串格式,所以要先转为对象 } catch(e){ return that.updateAccessToken(); } if (that.isValidAccessToken(data)){ return Promise.resolve(data); } else{ return that.updateAccessToken(); } }) .then(function(data){ console.log('accessToken已更新或者确认可用') that.access_token = data.access_token; that.expires_in = data.expires_in; that.saveAccessToken(data); return Promise.resolve(data); })
却不能使fetchAccessToken()返回promise对象,导致后期在uploadMaterial()方法内部调用时无then方法。
应该在第二部分代码前加个 return
我的分析是否正确
另外:每次服务器处理一个新的请求时,所有代码应该生成一个新的上下文环境吧?那么为什么要在fetchAccessToken()方法中有上面所示的第一部分代码呢?因为每次处理一个新的请求时,就会重新执行一次fetchAccessToken(),此时access_token属性还未挂载到this对象上,那么对其适用性进行验证是否多余?
写回答
1回答
-
Scott
2016-08-21
是的,你的分析非常正确,你是第一个顺利把这个坑才明白的同学,表扬!
另外,这里 token 真实的生产环境,会保存在 redis, mongodb,或者 json 文件中去维护,每一次都去读写,课程中讲解部分暂时存在 this 里面,减少实例中频繁的读写 token 次数
012016-08-22
相似问题