2014-07-24 3 views
11

나는 서버 메소드를 통해 데이터베이스 수를 수행하고 있습니다. 사용자는 카운트를 수행하는 방법을 선택한 다음 메소드를 호출 할 수 있습니다.Meteor - 클라이언트에서 서버 메소드 취소하기

내 문제는 계산에 시간이 걸릴 수 있고 사용자가 메서드가 실행 중이고 다른 수를 요청할 때 마음이 바뀔 수 있다는 것입니다. 호출 된 메소드를 취소하고 새 계수를 실행하는 방법이 있습니까?

this.unblock()이 효과가있을 것이라고 생각했습니다. 새 메소드를 실행할 수는 있지만 이전 메소드는 취소되지 않습니다. 또한 사전 계산을 고려한 다음 조회 만 사용했지만 선택기 조합이 너무 많습니다. 여기

은 매우 간단합니다, 내 코드입니다 : 주위에 작업

//Server 
Meteor.methods({ 
    getFilterCount: function(oFilterSelector) { 
     return clMaBldgs.find(oFilterSelector, {}).count(); 
    } 
}); 

//Client 
Meteor.call('getFilterCount', oFilterSelector, function (error, result) { 
    //do some stuff 
}); 
+1

알아 냈습니까? 알고 싶습니다. 실행중인 통화 목록을 표시하는 방법은 무엇입니까? – CFrei

+0

슬프게도, 아니오. 그러나, 나는 몽고 문서에서이 팁을 발견했다. 아직 시도하지 않았습니다. db 연산을 취소 할 수 있습니다 : http://docs.mongodb.org/manual/reference/method/db.killOp/ – Adam

+0

게임에 약간 늦었지만 '차단 해제'가 여전히 권장되는 방법입니다. 가기; [Current Meteor guide] (https://guide.meteor.com/methods.html#methods-vs-rest)의 세 번째 단락을 참조하십시오. – chazsolo

답변

0

더 많은,하지만 당신은 반응 변수가 있다면 방법의 상태입니다합니다 (DB의 항목 수), 및 메서드 자체에서 상태를 얻을 때마다 해당 플래그를 확인합니다. 그것을 막을 방법

다음
Meteor.methods({ 
    method: (_id) => { 
     status = getStatusForId(_id); 
     while(status) { 
      status = getStatusForId(_id); 
     } 
    } 
}); 

에 대한

{ 
    _id: "some id for the method", running: true 
} 

의사 코드는, 당신은 단지 그 플래그가 거짓으로 업데이트 방법은 바로 그것을 할 수있는 중지됩니다.

1

이미 클라이언트에서 서버에 대한 메서드 호출을 취소 할 수 없습니다.

그러나 짧은 간격으로 여러 번 호출 된 메서드는 마지막 호출의 결과에만 관심이 있습니다. debounce을 사용하면 실행을 일부 시간 지연시킬 수 있습니다. 이렇게하면 불필요한 서버 호출을 줄일 수 있습니다.

관련 문제