在我的sailsJS项目中,我使用Service作为API包装器与外部API通信。
例如,我想拥有一个初始化函数并传递诸如baseUrl,apiKey之类的参数,然后再调用sendRequest(endpoint)。
但是,今天我发现服务无法实例化,但是可以在全球范围内使用。由于SailsJS是异步工作的,因此每次都只会覆盖变量。
所以我的问题很简单:将“类”与类变量一起使用的正确方法是什么,在那里我可以拥有多个实例,就像我从PHP世界中了解它们一样?
首先,我想使用一个项目实例化我的API包装器,该项目包含基本数据,例如baseUrl和apiKey。
const ApiService = ServiceBase.getApiService(project);
ApiService.getEndpoint(endpoint).then(async(response) => {
// handle response
}
函数获取ApiService。 在这里,我尝试设置项目变量。
getApiService: (project) => {
this.setConfigParam('apiKey', project.api_key);
this.setConfigParam('baseUrl', project.url);
return ShopApiService;
}
函数getEndpoint(获取请求的快捷方式)
getEndpoint: async function(endpoint) {
if (ShopApiService.isTokenExpired()) {
await this.authorizeRequest();
}
return this.sendRequest(endpoint);
}
authorizeRequest(为后续请求设置accessToken)
authorizeRequest: async function() {
let response = await this.postRequest('auth/login', {apiKey: module.exports.config.apiKey});
if (response && response.statusCode == 200) {
module.exports.token.updated_at = Date.now();
module.exports.config.accessToken = response.body.accessToken;
return true;
}
return false;
}
我的问题是异步调用会覆盖诸如accessToken或baseUrl之类的变量,因此,如果获取访问令牌的请求完成了-可能是针对另一个请求。