请稍等 ...
×

采纳答案成功!

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

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

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对象。

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


正在回答

插入代码

1回答

Scott 2016-07-31 12:40:31

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

1 回复 有任何疑惑可以回复我~
  • 提问者 杨洋1989 #1
    为什么在这里then()方法不会自动返回Promise对象呢?
    回复 有任何疑惑可以回复我~ 2016-07-31 14:44:35
  • Scott 回复 提问者 杨洋1989 #2
    return 需要显示 return,不然就只是执行了而已,无结果返回
    回复 有任何疑惑可以回复我~ 2016-07-31 17:32:17
  • 提问者 杨洋1989 #3
    终于弄懂了
    回复 有任何疑惑可以回复我~ 2016-07-31 18:40:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信