'use strict' var Promise = require('bluebird'); var request = Promise.promisify(require('request')); var prefix = 'https://api.weixin.qq.com/cgi-bin/'; var api = { accessToken: prefix + 'token?grant_type=client_credential' }; function Wechat(opts) { var that = 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 that.updateAccessToken(that.appID, that.appSecret); } if(that.isValidAccessToken(data)) { Promise.resolve(data); } else{ return that.updateAccessToken(that.appID, that.appSecret); } }).then(function(data) { that.access_token = data.access_token; that.expires_in = data.expires_in; that.saveAccessToken(data); }); } Wechat.prototype.isValidAccessToken = (data) => { if(!data || !data.access_token || !data.expires_in) { return false; } var access_token = data.access_token; var expires_in = data.expires_in; var now = (new Date().getTime()); if(now < expires_in) { return true; } else { return false; } }; Wechat.prototype.updateAccessToken = (appID, appSecret) => { var url = api.accessToken + '&appid=' + appID + '&secret=' + appSecret; console.log('*************************url**************************'); console.log(url); console.log('*************************url**************************'); return new Promise((resolve, reject) => { request({url: url, json: true}).then((response) => { console.log('*************************response**************************'); console.log(response); console.log('*************************response**************************'); var data = response[1]; var now = (new Date().getTime()); var expires_in = now + (data.expires_in - 20) * 1000; data.expires_in = expires_in; resolve(data); }); }); }; module.exports = Wechat;
{ "name": "wechat", "version": "1.0.0", "description": "Jack wechat test", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Jack Qiu", "license": "ISC", "devDependencies": { "bluebird": "^3.3.5", "koa": "^1.2.0", "path": "^0.12.7", "raw-body": "^2.1.6", "request": "^2.71.0", "sha1": "^1.1.1", "xml2js": "^0.4.16" } }
请问为什么我的this关键字不好用在updateAccessToken方法中,另一个是updateAccessToken中的response[1]是undefined
登录后可查看更多问答,登录/注册