>

첫 번째 함수에서 API의 응답을 가져 와서 객체 필드에 넣은 다음 두 번째 함수에 기록하고 싶습니다. init 함수를 호출하면 앱이 시작됩니다.initApp (): 동일한 순서를 설명합니다. 먼저 데이터를 가져온 다음 기록합니다.

class App {
    constructor() {
        this.data;
    }
    // init app
    initApp() {
        this.getServerData();
        this.foo();           
    }
    // get data using ajax
    getServerData() {
        $.ajax({
                url: 'https://jsonplaceholder.typicode.com' + '/posts/1',
                method: 'GET',
                dataType: 'json',
            })
            .then(data => {
              //  putting data to object field
                this.data = data;
            })
            .catch(error => {
                console.log(error);
            });
    }
    // log it
    foo() {
        console.log('another function in action, api response:');
        console.log(this.data);
    }
}
const app = new App();
app.initApp();

그러나 pyzwyz 필드  정의되지 않았으므로 app.data 가 발생합니다.   foo() 전에 실행  끝. 아마도 getData() 를 추가하는 것이 좋습니다.   setTimeot()

initApp()

정상입니까 아니면 다른 경우를 사용하는 것이 더 좋습니까?

문제는 하나의 // init app initApp() { this.getData(); setTimeout(() => { this.foo(); }, 1000 ); } 외에 내 실제 앱에서  또 다른 5-7 기능이 될 것입니다. 모두 foo() 에 넣습니다  ? 다른 해결책이 있습니까?

도움을 주시면 감사하겠습니다.

.then

  • 답변 # 1

    여기서 콜백을 사용해야합니다.

    // init app
    var self=this;
    initApp() {
        this.getServerData(function(){ self.foo();  });
    }
    // get data using ajax
    getServerData(callback) {
        $.ajax({
                url: 'https://jsonplaceholder.typicode.com' + '/posts/1',
                method: 'GET',
                dataType: 'json',
            })
            .then(data => {
              //  putting data to object field
                this.data = data;
                callback()  ;          
            })
            .catch(error => {
                console.log(error);
            });
    }
    
    

  • 답변 # 2

    아약스 호출의 응답에서 foo ()를 호출하면 아약스 호출 후에 만 ​​foo가 실행됩니다.

관련 자료

  • 이전 linux - 파일이 많은 파일을 한 줄씩 두 단어 이상으로 grep
  • 다음 excel - 웹 스크래핑 매크로는 내 컴퓨터에서만 작동합니다