js 使用async await 捕获异常_如何使用async和await这对组合设计统一的取Access Token的函数...

最近我在使用SAP云平台的机器学习API做和SAP系统的集成,因为SAP Cloud Platform Leonardo上的机器学期API,每次消费时需要传一个Access Token,故在每次实际调用API前,我需要先发一个请求去获取Access Token. 该请求的响应,除了返回实际的token外,还有一个过期时间,expires_in字段:

213a90e86dee2080e88180cff8e26269.png

根据OAuth 2.0标准定义,expires_in字段代表服务器颁发的该token,距离过期时间还剩的秒数。

25cb03a449c40f6f45898f6cc5f3e40f.png

我的代码如下:

const request = require('request-promise-native');var config = require('../config.js'); var TOKEN = undefined;var EXPIRES_IN = undefined;var TOKEN_FETCHED_SINCE = undefined;function isCurrentDateExpired(){ var current = new Date(); var diffInMilliSeconds = current - TOKEN_FETCHED_SINCE; var diffInSecond = Math.ceil(diffInMilliSeconds/1000); var expired = diffInSecond >= EXPIRES_IN ? true:false; // for debug; // expired = true;  return expired;}async function getAccessToken(){ if( TOKEN === undefined || isCurrentDateExpired()){ var raw = new Buffer(config.username + ":" + config.password); const accessToken = await request({ method: 'GET', headers: { 'Authorization': 'Basic ' + raw.toString('base64') }, url: config.ACCESS_TOKEN, json: false }); var oToken = JSON.parse(accessToken); EXPIRES_IN = oToken.expires_in; TOKEN = oToken.access_token; TOKEN_FETCHED_SINCE = new Date(); return oToken.access_token; } else{ return TOKEN; }}var request1 = getAccessToken();var freshNewToken, secondTimeToken;request1.then(function(o){ // console.log("token1: " + o); freshNewToken = o;});function test2(){ var b = getAccessToken(); b.then(function(o){ // console.log("token2: " + o); secondTimeToken = o; console.log("they should be equal: " + (freshNewToken == secondTimeToken)); });}setTimeout( test2, 6000);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值