Как выйти из класса и прервать его? - PullRequest
0 голосов
/ 06 июня 2019

Я хочу прервать класс и завершить его, когда класс столкнулся с проблемой и вернул мне указанную ошибку.

class OnlineVisitors {
    constructor() {
        // get VisitorIP
        this.fetchIP().then(ip => this.IP = ip).catch(err=>{
            return err
        });
    }
    async fetchIP() {
        return new Promise(async (resolve, reject) => {
            await axios.get('https://api.ipgeolocation.io/getip')
                .then(res => resolve(res.data.ip))
                .catch(error=>{
                    if (error.response) {
                        return reject(this.ErrorModel({
                            message:'The request was made and the server responded with error',
                            sourceCode:'getIPRequest',
                            errorDetail:error.response.data
                        }))
                        } else if (error.request) {
                        return reject(this.ErrorModel({
                            message:'The request was made but no response was received',
                            sourceCode:'getIPRequest',
                            errorDetail:error.request
                        }))
                        } else {
                        return reject(this.ErrorModel({
                            message:'Something happened in setting up the request that triggered an Error',
                            sourceCode:'getIPRequest',
                            errorDetail:error.message
                        })) 
                    }
                })
        })
    }
}

в приведенном выше коде, я хочу, чтобы класс вернул мне мойпользовательская ошибка и не продолжайте всякий раз, когда не можете получить IP извне.но он не вернул ошибку и продолжает класс с ошибкой.что мне делать?

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Давайте попробуем с try / catch. Например:

  1 const axios = () => new Promise((resolve, reject) => setTimeout(() => reject({ response:  "Error wirh" }), 2000));
  2 
  3 class SimpleClass {
  4         async fetchIp() {
  5           console.log("Tests");
  6           try {
  7             return await axios();
  8           } catch (e) {
  9             if (e.response) {
 10                 // do anything
 11                return new Error("Error on response");
 12             } else if (e.request) {
 13                 // do anything
 14             } else {
 15                 // do anything
 16             }
 17           }
 18         }
 19 }       
 20 
 21 new SimpleClass().fetchIp()
 22   .then(res => console.log(res))
 23   .catch(err => console.log(err));
0 голосов
/ 06 июня 2019

В вашем конструкторе вы не можете вернуть ошибку, вместо этого используйте непосредственно ваш метод fetchIP

let x = new OnlineVisitors()
         .fetchIP()
         .then()
          .catch((err) => {
             //handle the err 
          })
...