与对象函数相比,从对象字符串调用函数



为什么使用

const TokenProperties = {
access_token: PropertiesService.getScriptProperties().getProperty("access_token")
}

不是

const TokenProperties = {
access_token: ()=> PropertiesService.getScriptProperties().getProperty("access_token")
}

function getAccessToken() {
// Makes REST API POST request for access token...
// .......
PropertiesService.getScriptProperties()
.setProperty("access_token", access_token);
return access_token;
}

function restCall (){

checkToken(); // Let's say the access token is expired and this function calls getAccessToken() 
// Why does...
var restEndpoint = "https://api........."
var head = {
"Authorization":"Bearer "+ TokenProperties.access_token,   // <- This doesn't use the new token
"Authorization":"Bearer "+ TokenProperties.access_token(), // <- This does (as I wanted)
"Content-Type": "application/json"
}
}
  • 那行代码在checkToken()完成后不运行吗?
  • 从对象字符串
    调用函数与作为对象函数调用它有什么区别?
  • 如何在调用堆栈中调用函数的顺序?
  • 我应该这样做吗?最好的做法是什么?

如果TokenProperties是一个全局变量,access_token值将在调用restCall()checkToken()方法之前设置。下面的方法可以工作。

function restCall (){

checkToken();
const TokenProperties = {
access_token: PropertiesService.getScriptProperties().getProperty("access_token")
}
// ...
}

另一方面,正如@capchuck所解释的,

const TokenProperties = {
access_token: ()=> PropertiesService.getScriptProperties().getProperty("access_token")
}

在全局变量中只定义了access_token方法体,每次调用TokenProperties.access_token()

时对其求值。最佳实践是使用该方法。我通常做的是定义一个类MyProperties

class MyProperties{
_get_property(key){
return PropertiesService.getScriptProperties().getProperty(key)
}
getProperty1(){
return this._get_property('property1')
}
getProperty2(){
return this._get_property('property2')
}
}

,并像这样在方法体中使用该类新的属性().getProperty1 ()

如果你使用Typescript,可以这样做:

interface Keys{
property1: any
property2: any
// ... 
}
class MyProperties{
constructor(readonly properties = PropertiesService.getScriptProperties()) {

}
get(key: keyof Keys): string | undefined {
return this.properties.getProperty(key)
}
}

当您将令牌存储为字符串属性时,它只计算一次。当您将其存储为函数时,每次调用它都会计算。

JS中的排序就像一个堆栈-后进先出。