如何在A类中调用A类的方法?

时间:2019-07-20 09:34:19

标签: javascript ajax recursion this

如果发生401并且计数器小于或等于1,我需要在AJAX内再次调用方法getData()。问题是,该方法未在该401状态下被调用...如何调用该方法在同一个班级里?

export default class Search {
    constructor(){
        this.result = {};
    }

      getData(callback, url){
        var counter = 0;
        alert("GET DATA CALLED " + counter);
        $.ajax({
            'url': proxy + url,
            'type': 'GET',
            'content-Type': 'x-www-form-urlencoded',
            'dataType': 'json',
            'headers': {
              'Authorization': 'bearer ' + localStorage.access_token
            },
            'success': function (result) {
              documentView.fillDocuments(result);
              callback(result);
            },  
            'error': function (XMLHttpRequest, textStatus, errorThrown) {
          //    alert('Error: ' + errorThrown);
              console.log(XMLHttpRequest.status + ' ' + 
                  XMLHttpRequest.statusText);
              return "";
            }, statusCode: {
              401: function (response) {
                counter++;
                alert("401");
                if(counter <= 1){
                  refreshToken(); // CALLED
                  getData(callback, url); // NOT CALLED
                } 
              }
            }
        });
      }

2 个答案:

答案 0 :(得分:1)

您对正则表达式的使用正在为'this'创建新作用域,您可以使用arrow functions对此进行绕行。

类似下面的内容...未经测试。

export default class Search {
    constructor() {
        this.result = {};
    }

    getData = (callback, url) => {
        var counter = 0;
        alert("GET DATA CALLED " + counter);
        $.ajax({
            url: proxy + url,
            type: "GET",
            "content-Type": "x-www-form-urlencoded",
            dataType: "json",
            headers: {
                Authorization: "bearer " + localStorage.access_token
            },
            success: (result) => {
                documentView.fillDocuments(result);
                callback(result);
            },
            error: (XMLHttpRequest, textStatus, errorThrown) => {
                //    alert('Error: ' + errorThrown);
                console.log(
                    XMLHttpRequest.status + " " + XMLHttpRequest.statusText
                );
                return "";
            },
            statusCode: {
                401: (response) => {
                    counter++;
                    alert("401");
                    if (counter <= 1) {
                        refreshToken(); // CALLED
                        this.getData(callback, url); // NOT CALLED - Should be called now.
                    }
                }
            }
        });
    }
}

答案 1 :(得分:0)

this.getData(callback, url)-调用类中的方法。

但是您需要在function () {}方法内用箭头函数() => {}替换所有函数声明getData()