如何在类中将Promise对象转换为对象

时间:2019-06-05 13:30:44

标签: javascript class promise async-await

我想使用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)

2 个答案:

答案 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函数,因为在该函数中您将讨厌其他方法。