请稍等 ...
×

采纳答案成功!

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

为什么第二次启动服务后说找不到 access_token

function Wechat(opts){
	let _this = this;
	this.appID = opts.appID;
	this.appSecret = opts.appSecret;
	this.getAccessToken = opts.getAccessToken;
	this.saveAccessToken = opts.saveAccessToken;

	this.getAccessToken()
		.then(function(data){
			try{
				data = JSON.parse(data);
			}catch(e){
				return _this.updateAccessToken()
			}

			if(_this.isValidAccessToken(data)){
				Promise.resolve(data);
			}else{
				return _this.updateAccessToken()
			}
		})
		.then(function(data){
			_this.access_token = data.access_token; // 这里报错了??第二次启动服务的时候
			_this.expires_in = data.expires_in;

			_this.saveAccessToken(data);
		})
}

Unhandled rejection TypeError: Cannot read property 'access_token' of undefined

    at E:\360yun\study\koa\koa\g.js:33:29

第一次启动会写入wechat.txt文档

正在回答 回答被采纳积分+3

11回答

Scott 2016-05-04 17:49:52

this.getAccessToken()

        .then(function(data){

前面需要加一个 return


这个问题好多同学都碰到了,是我课程前面不小心埋下的一个坑

3 回复 有任何疑惑可以回复我~
  • 我加了个 return ,但报同样的错呢。
    回复 有任何疑惑可以回复我~ 2016-07-15 23:08:13
  • Scott 老师,我看到您的浏览器上面保存了好多学习的网站 书签,能分享给我吗,向您学习  邮箱 742538662@qq.com  ,麻烦您了
    回复 有任何疑惑可以回复我~ 2016-12-08 17:36:31
  • Scott 回复 immonkey #3
    我里面乱七八糟的,说实话从来没看过,就不分享给你了,遇到的东西最好的办法是当下就分出时间消化它,不要 Mark 太多
    回复 有任何疑惑可以回复我~ 2016-12-09 13:04:46
百年叔叔 2016-11-16 15:57:26

大家好,我加了但是并没有卵用啊。也是这个错误

1 回复 有任何疑惑可以回复我~
WyattWang 2016-07-15 23:11:23

function Wechat(opts) {

    var that = this

    this.appID = opts.appID

    this.appSecret = opts.appSecret

    this.getAccessToken = opts.getAccessToken

    this.saveAccessToken = opts.saveAccessToken


    return this.getAccessToken()

        .then(function(data) {

            try {

                data = JSON.parse(data)

            } catch(e) {

                return that.updateAccessToken()

            }


            if (that.isValidAccessToken(data)) {

                Promise.resolve(data)

            } else {

                return that.updateAccessToken()

            }

        })

        .then(function(data) {

            that.access_token = data.access_token

            that.expires_in = data.expires_in


            that.saveAccessToken(data)

        })

}


1 回复 有任何疑惑可以回复我~
  • Elle绀 #1
    谢谢!!!
    回复 有任何疑惑可以回复我~ 2017-08-21 22:06:21
慕ke小粉si儿 2018-08-01 19:28:27

在哪里找

0 回复 有任何疑惑可以回复我~
qq_khrystal_0 2017-01-17 23:51:32

在上传临时素材报这个错误

{ errcode: 48001,

     errmsg: 'api unauthorized hint: [8nrNMA0148vr47!]' } }

应该是因为我的接口权限未获得, 怎么解决呢? 

0 回复 有任何疑惑可以回复我~
慕粉1742311753 2016-12-13 22:56:24

创建微信菜单那里 报错 

Unhandled rejection TypeError: Cannot read property 'then' of undefined

是怎么回事?

0 回复 有任何疑惑可以回复我~
qq_khrystal_0 2016-09-21 23:57:57

Wechat.prototype.fetchAccessToken = function(data) {

    ...

}


这个data参数有什么作用??

0 回复 有任何疑惑可以回复我~
  • Scott #1
    是个无用参数,可以删了
    回复 有任何疑惑可以回复我~ 2016-09-22 02:24:24
慕ke小粉si儿 2016-09-19 17:34:20

同样碰到,领教了

0 回复 有任何疑惑可以回复我~
落叶无痕 2016-07-26 09:41:29

有点奇怪为什么老师的没加也正常

0 回复 有任何疑惑可以回复我~
Scott 2016-07-16 08:57:40

fetchAccessToken 里面也需要加的


Wechat.prototype.fetchAccessToken = function(data) {
  var that = this
  return 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) {
      that.saveAccessToken(data)
      return Promise.resolve(data)
    })
}

 

返回这个 promise,才能让后面的流程继续通过  then 向下执行

0 回复 有任何疑惑可以回复我~
  • 老师,我按照您说的加了return之后,控制台直接提示Invalid URI "undefinedaccess_token=vNUmi06myql6p3cXyi
    QLENe2NscT6rLYNSwbMFZ014MdR2W_AT39EWsRBHKE0fdqCI5a_n6FHXrykFvb7cCHbUaR07UYJh1519
    Lvav937mcLpXgHFg0t_0176D7ondDFWBQbAEAEJY"
    回复 有任何疑惑可以回复我~ 2016-08-19 16:52:17
  • 这个 console 你是加在哪里的
    回复 有任何疑惑可以回复我~ 2016-08-19 17:25:52
  • 我检查了一下是因为我删除菜单的url填错导致的。尴尬。。。。
    回复 有任何疑惑可以回复我~ 2016-08-19 18:16:34
慕粉3389384 2016-06-16 16:36:36

同碰到,能解释下这个return具体加在哪?为什么要加么?谢谢!

0 回复 有任何疑惑可以回复我~
  • Scott #1
    是在这个前面加:
    
    if(_this.isValidAccessToken(data)){
    				Promise.resolve(data);
    
    Promise.resolve(data); 前面加,能返回一个 Promise,继续往下通过 then 的回调,传递数据。
    回复 有任何疑惑可以回复我~ 2016-06-16 17:31:38
  • 提问者 colpu #2
      Promise.resolve(data)
    回复 有任何疑惑可以回复我~ 2016-07-26 22:06:09
  • Scott #3
    if (that.isValidAccessToken(data)) {
            return Promise.resolve(data)
          }
    
    加了 return ,才能返回一个 promise,才能让调用它之后进而拿到这个 promise,继续通过 then 的回调,向下传递 promise
    回复 有任何疑惑可以回复我~ 2016-09-19 22:11:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信