我想使用axios从项目外部获取数据。我是在课堂上这样做的,但是由于某种原因,我使用了await和promise来在promise对象中检索数据,但最终我在[object promise]中接收了数据。
This is converted to "[object Promise]" by using .toString() now and will return an error from v.3.0
on.
Please handle this in your code to make sure everything works as you intended it to.
Promise { '51.38.89.159' }
我遇到的错误::
unix_timestamp(string date, string pattern)
答案 0 :(得分:0)
您正在将IP地址的承诺分配到this.IP
中。
您将需要.then
承诺获得实际的IP地址;到VisitorInter()
时它可能可用或不可用,或者其他任何需要IP地址的东西都被调用。
class OnlineVisitors {
constructor() {
this.ipPromise = this.fetchIP();
// redis stuff elided from example
}
async fetchIP() {
const resp = await axios.get("https://api.ipgeolocation.io/getip");
return resp.data.ip;
}
async VisitorInter() {
const ip = await this.ipPromise; // this could potentially hang forever if ipgeolocation.io doesn't feel like answering
console.log(ip);
}
};
module.exports = new OnlineVisitors();
答案 1 :(得分:0)
好吧,您在几个地方错过了等待,这是完整的更正:
If Table1 Is Nothing Then
由于方法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
。
但是由于您在建筑中,所以不能使用await,因此解决方案是使用chaning:
this.IP = await this.fetchIP()
请注意,在初始化新的this.fetchIP().then(ip => this.IP = ip);
时,您需要为其提供一个Promise
函数,因为在该函数中您将讨厌其他方法。