2016-10-26 4 views
0

나는 ES6에 대해 상당한 양의 문서를 읽었으며 변경된 내용은 무엇입니까? 나는 fetch 같은 새로운 라이브러리의 일부로 새로운 oop 구문을 받아들입니다. 그래서 여기 내가 가지고있는 코드는 다음과 같습니다ES6 : "this"를 페치와 함께 사용하는 방법?

apiCall(url, thisAlias=this){ 
    fetch(url).then(function(response){ 
    return response.json(); 
    }) 
    .then(function(respObj){ 
     thisAlias.domUpdater(respObj); 
    }); 
} 

이 상속 된 클래스가 기본 클래스에 결국 많은 상속 클래스를해야합니다. 아이디어는 fetch를 사용하여 범용 API 호출을하는 것이고 상속 된 클래스마다 domUpdater 메서드를 변경할 수 있습니다. 이 코드를 가져 와서 fetch 호출 내에서 사용할 수 있도록이 키워드의 별명을 지정하는 데 많은 시간을 보냈습니다. 이 일을 더 우아한 방법이 있습니까? 저는 이것을 인수로 직접 넘겨 줄 수는 없습니다. 당신이 async/await 새로운를 사용할 수 있는지 어휘 this

apiCall (url) { 
    fetch(url).then(
    response => response.json() 
).then(
    respObj => this.domUpdater(respObj) 
).catch(
    err => console.error(err.message, err) 
) 
} 

그렇지 않으면 당신이 코드의 특정 부분에 가장 도움이 될 것입니다이 arrow functions를 사용

+0

.bind()? – diugalde

답변

2

, 당신은 약 this를 가리키는 걱정할 필요가 없습니다 화살표 기능이 없더라도 전혀 잘못된 것입니다.

async apiCall (url) { 
    try { 
    let response = await fetch(url); 
    this.domUpdater(response.json()); 
    } 
    catch (err) { 
    console.error(err.message, err); 
    } 
}
+0

빠른 응답을 보내 주셔서 감사합니다. 나는이 화살표 표기법을 사용했지만 왜 그런지 이해하지 못했다. 당신이하고있는 일을 설명하거나 올바른 방향으로 나를 가리킬 수 있습니까? 감사합니다. ES6에 대한 정보를 찾는 것이 어렵습니다. –

+0

@LoganSaruwatari arrow 함수는 자신의'this '(즉 어휘 범위)를 묶지 않으므로'then'의'this'는 둘러싼 컨텍스트 또는 클래스를 나타냅니다. 정규 함수는 기본적으로'this'가 윈도우를 참조하므로'this.domUpdater'를 실행하면'window.domUpdater' (정확하지 않음)가 실행됩니다. 당신은 또한 '이'를 묶을 수도 있지만 화살표 기능은 일반적으로 더 잘 고려됩니다. – Li357

+0

와우! 당신은 첫 번째 코드 블록으로 내 마음을 망가 뜨 렸고, 두 번째 블록은 완전히 새로운 차원으로 나아갔습니다. 나는 ES6 스승이되어야한다. 내가 아는 모든 훌륭한 프로그래머들은 js에서 대발하지 않습니다. –

관련 문제