Ну, вы пропустили ожидание в нескольких местах, вот полная коррекция:
const Online_Visitors_System = class OnlineVisitors{
constructor(){
// get VisitorIP
this.fetchIP().then(ip => this.IP = ip);
// config redis for key space notification
this.redis = Redis.createClient();
this.redis.on('ready',()=>{
this.redis.config('SET',"notify-keyspace-events",'KEA')
})
PubSub.subscribe("__keyevent@0__:incrby")
}
fetchIP(){
return new Promise((resolve,reject)=>{
axios.get('https://api.ipgeolocation.io/getip')
.then(res=>resolve(res.data.ip))
})
}
VisitorInter(){
console.log(this.IP)
}
};
Поскольку метод fetchIP
является асинхронной функцией, вам также нужно await
при ее вызове, поэтому: this.IP = await this.fetchIP()
,Но так как вы находитесь в конструкции, вы не можете использовать await, поэтому решение состоит в том, чтобы использовать chaning: this.fetchIP().then(ip => this.IP = ip);
Обратите внимание, что при запуске нового Promise
вам нужно дать ему функцию async
, потому что внутричто вы ожидаете других методов.