簡體   English   中英

如何在A類內部調用A類的方法?

[英]How to call a method of a class A inside class A?

我需要再次在我的 AJAX 中調用 getData() 方法,如果 401 發生並且計數器低於或等於 1。問題是,在 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
                } 
              }
            }
        });
      }

您對正則函數表達式的使用正在為“this”創建一個新的作用域,您可以使用箭頭函數來繞過它。

類似下面的東西......未經測試。

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.
                    }
                }
            }
        });
    }
}

this.getData(callback, url) - 調用類內的方法。

但是你需要在getData()方法中用箭頭函數() => {}替換所有的函數聲明function () {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM