Promise.resolve(data)无法将data传出去

来源:

杨洋1989

2016-07-31

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对象。故将其改为:

return new Promise(function(res,rej){
    console.log(data);
    res(data);
})

更改后,第二个then方法输出了正常的access_token对象。

请问老师我的分析是否合理。


写回答

1回答

Scott

2016-07-31

Promise.resolve(data) 前面加一个 return 就可以了,包括 that.updateAccessToken() 前面也加一个 return,只要 return 一个 promise,就可以链式调用 then 了

1
4
蓝with黑
bluebird模块语法里规定是要return的吗?
2017-05-01
共4条回复

7天搞定Node.js微信公众号

Koa框架、ES2015新特性、MongoDB,开发微信公众号

1742 学习 · 787 问题

查看课程