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

来源:2-6 第二天 票据 access_token 打开新世界大门

colpu

2016-05-04

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文档

写回答

11回答

Scott

2016-05-04

this.getAccessToken()

        .then(function(data){

前面需要加一个 return


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

3
6
拖走NET
回复
Scott
这样 在前面加return 后又有一个新的问题就是WeChat对象返回的不是本身 导致 wechat.deleteMenu调用失败!
2016-12-18
共6条回复

百年叔叔

2016-11-16

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

1
0

WyattWang

2016-07-15

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
1
Elle绀
谢谢!!!
2017-08-21
共1条回复

慕ke小粉si儿

2018-08-01

在哪里找

0
0

qq_khrystal_0

2017-01-17

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

{ errcode: 48001,

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

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

0
0

慕粉1742311753

2016-12-13

创建微信菜单那里 报错 

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

是怎么回事?

0
0

qq_khrystal_0

2016-09-21

Wechat.prototype.fetchAccessToken = function(data) {

    ...

}


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

0
1
Scott
是个无用参数,可以删了
2016-09-22
共1条回复

慕ke小粉si儿

2016-09-19

同样碰到,领教了

0
0

落叶无痕

2016-07-26

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

0
0

Scott

2016-07-16

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
3
妈妈说要好好学习
回复
Scott
我检查了一下是因为我删除菜单的url填错导致的。尴尬。。。。
2016-08-19
共3条回复

慕粉3389384

2016-06-16

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

0
4
一直都在路上
return getAccesstoken
2016-10-18
共4条回复

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

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

1742 学习 · 787 问题

查看课程