2016-10-25 7 views
0

ES6 모듈에 관한 질문과 그 모듈 간의 함수를 콜백으로 올바르게 호출하는 방법이 있습니다. 데이터시다른 모듈을 콜백 함수로 호출 [ES6]

테이크 "page_API.js는"콜백 함수가 나는이 requestExecuteAsync 등을 처리하는 내 "xml_functions.js"지금

// Make a call to our server, Once we've recieved data we'll call our callback 

import {requestExecuteAsync} from "../xml_functions"; 

export const getData =() => { 
    requestExecuteAsync('api/getData', "dataRecieved"); 
}; 

export const dataRecieved =() => { 
    alert('Recieved Data'); 
}; 

라고 받았다되고, 나는 dataRecieved를 호출하고 싶습니다 일단 서버가 응답하면

은 이전에 내가 전역 네임 스페이스에 살고있는 모든 기능과 함께, 많은 JS 파일 구성 작업 코드베이스, 그래서 함수는 그러나 이제 콜백 함수가 같은 창에 정의되어 있지 않습니다이

// once data has been retrieved from server 
if (callbackparamsArr.length) { 
    window[callback](res, callbackparamsArr); 
} else { 
    window[callback](res); 
} 

처럼 일 더 이상 dataRecieved의 범위를 가지고 있지 않습니다.

내가 requestExecuteAsync에 정의 된 다른 문자열이 주어지고 단지 "dataRecieved"수입에

[callback](res) 

하지만 인해를 호출 xml_functions 다음

import { dataRecieved } from "../MyPage/MyPage_API.js"; 

및 내부 dataRecieved 기능을 포함하여 시도했습니다 (예 : "dataRecieved"대신 "_Data_Recieved_"라고 할 것입니다. 무엇을해야할지 모르겠습니다.

도움이 될만한 점이 있으십니까?

감사합니다.

+2

문자열 대신 함수 자체를 전달하지 않는 이유는 무엇입니까? 콜백 대신 약속을 사용하지 않는 이유는 무엇입니까? –

+0

"* 이전에 내가 작업 한 코드베이스는 많은 JS 파일들로 구성되었고 모든 기능들은 글로벌 네임 스페이스 *에 존재했습니다. ES6 모듈이 더 나은 접근 방식을 강요합니다 .-) – Bergi

+0

@Bergi Aha you tell me that! 새로운 프로젝트에서 기존의 XML 구문 분석 + 네트워크 코드를 모듈로 다시 작성할 기회를 얻었습니다. 훨씬 좋았습니다! –

답변

2

전화 할 콜백 함수의 이름을 전달하면 안됩니다.

import {requestExecuteAsync} from "../xml_functions"; 

export function getData() { 
    requestExecuteAsync('api/getData', dataReceived); 
//          ^^^^^^^^^^^^ 
} 
export function dataReceived() { 
    alert('Recieved Data'); 
} 

export function requestExecuteAsync(path, callback) { 
    … 
    if (typeof callback == "function") callback(res); 
    … 
} 

하지만 ES6을 사용하고 있기 때문에, 당신은 당신이 주변에 콜백 함수를 전달할 필요가 없도록 약속 좀보고 할 수 있습니다 : 그냥 함수 자체를 전달 모든.

+0

그냥 대단히 감사합니다. 많이 고마워요! –

관련 문제