1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | this .getAccessToken() .then( function (data){ try { data = JSON.parse(data); //从外部文件获取的数据都是字符串格式,所以要先转为对象 } catch (e){ return that.updateAccessToken(); } if (that.isValidAccessToken(data)){ console.log(data) Promise.resolve(data); } else { that.updateAccessToken(); } }) .then( function (data){ console.log(data) that.access_token = data.access_token; that.expires_in = data.expires_in; that.saveAccessToken(data); }) |
当第一次运行该代码,获取access_token并写入文件,运行正常。第二次运行时报错。
如上所示代码,当运行到第一个then()方法时,控制台输出的是正常的access_token对象。
当运行到第二个then()方法时,控制台输出的是undefined。
说明上一个then方法的Promise.resolve(data)语句并没有将data传出去。
我分析是由于该语句并不能返回一个Promise对象。故将其改为:
1 2 3 4 | return new Promise( function (res,rej){ console.log(data); res(data); }) |
更改后,第二个then方法输出了正常的access_token对象。
请问老师我的分析是否合理。