432360
们目前项目中的代码专门针对程序的边界做了一层封装,尤其是调用第三方应用的请求相关的代码。但是我感觉不是特别的好,且看下面这一段伪代码
- 类的定义
const axios = require('axios');
class Client {
constructor({ url, username, password }) {
this.url = url;
this.username = username;
this.password = password;
this.token = '';
this.login = this.login.bind(this);
this.getSomething = this.getSomething.bind(this);
this.login();
}
async login() {
const { token } = await axios.post(...);
this.token = token;
}
async getSomething(params) {
if (!this.token) {
console.error('未登录');
return;
}
const result = await axios.get(..., {
headers: {
token: this.token,
},
...
});
return result;
}
}
- 调用
const Client = require('./Client.js');
async main() {
const client = new Client({
url: '127.0.0.1',
username: 'zhangsan',
password: '...'
});
const result = await client.getSomething();
console.log(result);
}
他这里在实例化该对象是,构造函数调用了一个async的函数,如果立即调用getSomething()方法,可能会存在login()方法还未执行完,token还没有的情况。
请问一下大家一般是怎样封装这样的类的?或者说怎样处理这样的情况?