2016-09-06 3 views
0

Meteor를 처음 사용했습니다. 다음 코드를 사용하여 서버에 저장된 파일을 읽습니다.파일을 읽는 Meteor 동시 및 비동기 호출

클라이언트 측

Meteor.call('parseFile', (err, res) => { 
    if (err) { 
    alert(err); 
    } else { 
    Session.set("result0",res[0]); 
    Session.set("result1",res[1]); 
    Session.set("result2",res[2]); 
    } 
}); 
let longitude = Session.get("result0"); 
let latitude = Session.get("result1"); 
var buildingData = Session.get("result2"); 

서버 측 나는 그것이 내가에게 어디든지 다시 따라서 결과를 보낼 시간이 걸리는 전화를 걸하면서 문제가

Meteor.methods({ 
    'parseFile'() { 
    var csv = Assets.getText('buildingData.csv'); 
    var rows = Papa.parse(csv).data; 
    return rows; 
    } 
}) 

위도와 경도를 사용하여 정의되지 않은 페이지 나누기를 제공합니다. 그래서,이 문제를 피하기위한 해결책이 있습니까? 솔루션 중 하나는 동기 호출을 수행하고 결과가 리턴되기를 기다리는 것입니다.

+1

"해결책 중 하나는 클라이언트가 아니라 동기 호출을 할 수 있습니다. 클라이언트에서 동기 호출을 할 수 없으면 페이지를 견고하게 만들어야합니다. 세션 변수가 설정 될 때까지 기다리는 "로딩 페이지"를 구현하는 것이 좋습니다. 어느 페이지에서 렌더링 할지를 렌더링합니다. –

답변

0

futures package을 사용하여 서버 메서드를 동 기적으로 실행하도록 만들 수 있습니다. 그러면 클라이언트가 메서드 완료를 기다려야합니다.

그것은 다음과 같이 보일 수 있습니다

Meteor.methods({ 
    'parseFile'() { 
    var future = new Future(); 
    var csv = Assets.getText('buildingData.csv'); 
    var rows = Papa.parse(csv).data; 
    future.return(rows); 
    future.wait(); 
    } 
}); 

이것은 및 설정하는 것은 당신의 당신의 Meteor.methods() 정의를 포함하는 파일에 제대로 포함 위에 링크 된 선물 패키지를 설치를 필요로한다. 당신은 또한 당신의 방법 안에서 좋은 에러 처리를 들여다 볼 수도 있습니다.

업데이트 : 미래 패키지에 대한 링크는 here에 대해 읽을 수있는 NPM 패키지입니다. 위의 링크는 대기 패키지에 대한 것입니다. 대기 패키지는 오래된 래퍼 패키지처럼 보입니다.

+0

"선물"패키지는 npm 또는 대기입니까? – Optymystyc

+0

NPM 패키지입니다. NPM 버전에 대한 링크가 포함 된 업데이트를 추가했습니다. – NFab