2016-09-12 2 views
1

isomorphic-fetch 메서드를 무시하고이 요청을 보내기 바로 전에 showLoader()을 호출하고 요청이 완료된 후 hideLoader()을 호출하려고합니다. 이제 원래의 fetch 메소드처럼 새로운 fetch를 체인으로 연결할 수 있도록이 함수를 오버라이드하고 싶습니다. 따라서 모든 약속을 존중하고 전달해야합니다. 요약하면, 내가 원하는 : fetchPlus(extraArg) JS에서 가져 오기 메서드를 재정의하고 약속을 전달합니다.

  • fetchPlus() 요구에

    • 재정의 원래 fetch() 그냥 fetch()를 호출 직후 fetch() 완료되기 전에 addtional 작업을 수행 할 수 있습니다. ,

    fetchPlus(extraArg, originalArgs...).then(response => {...}).catch(error => {...});

    내가 JS에 비교적 새로운 해요 반응하고 돌아 오는 : 내가 할 수 있도록

  • fetchPlus() 그것은 체인 지원해야 원래 fetch()
  • 의 용도에 대한 교체에 드롭해야한다 그러니 내가 뭔가 분명한 것을 놓친다면 실례합니다. 나는 fetch()에 대해 읽었으며 응답이 더 이상 전달되거나 오류가 처리 될 수 있도록 Promise을 반환한다는 것을 알고 있습니다. 나는 그것을 수행하는 추악한 방법을 찾았습니다. responseHandler와 errorHandler 함수를 fetchPlus에 대한 args로 전달합니다.

    fetchPlus(extraArg, url, options, responseHandler, errorHandler) { 
        showLoader(extraArg); 
        fetch(url, options) 
        .then(response => { 
         hideLoader(extraArg); 
         responseHandler(response); 
        }.catch(error => { errorHandler(error); }); 
    } 
    

    하지만 깨끗하지 않습니다. 약속이 올바르게 전달 된 원본 가져 오기를 드롭 인 대체로 찾을 수 있는지 확인하고 싶습니다.

    나는 어떤 도움을 주셔서 감사합니다!

  • +0

    당신이 * 대체 *은'fetch' 기능 하시겠습니까 아니면 그냥'fetch' 기능의 수정 된 버전이 될 것입니다 새로운 기능을 만들 ? –

    +0

    실제 fetch()를 호출하기 전과 후에 추가 작업을 수행하도록 fetch 함수를 래핑하려고합니다. 그래서 당신이 그것을 fetch() 또는 fetch()의 수정 된 버전보다 우선적으로 호출 할 수 있다고 생각하십니까? 아래의 해답은 내 문제를 해결합니다. –

    +0

    재정의하면'fetch'에 다른 함수를 할당 할 것입니다. –

    답변

    3

    Promise를 반환한다는 것을 알고 있다면 반환하지 않는 이유는 무엇입니까?

    fetchPlus(extraArg, url, options) { 
        showLoader(extraArg); 
        return fetch(url, options) 
         .then(response => { 
         hideLoader(extraArg); 
         return response; 
         } 
    } 
    

    그 다음을 사용 :

    fetchPlus(extraArg, url, options) 
        .then(response => ...) 
        .catch(error => ...) 
    
    +1

    완벽한! 이것은 예상대로 작동합니다. 내가 그때 처리기 물건에서 약속을 반환 할 수 있다는 것을 몰랐습니다. 정말 고맙습니다! –

    +1

    그게 바로 체인이 가능한 약속입니다. – azium

    관련 문제