2016-09-02 1 views
0

저는 엠버 응용 프로그램을 구축 중이며 저장소를 호출 할 때와 동일한 문제가 계속 발생하지만 저장소가 데이터를 검색하기 전에 함수가 계속 컴파일됩니다 백엔드에서. 특히 findRecord에 문제가 있습니다.Ember.js - 저장소가 완료되기 전에 함수가 완료되었습니다.

var admin = this.store.findRecord('admin', 1); 
console.log(admin.get('season')); 
console.log('Are we here?'); 

와 두 경우 모두

this.store.findRecord('admin', 1).then(function(admin) { 
    console.log(admin.get('season')); 
}); 
console.log('Are we here?'); 

Are we here? 시즌 전에 기록됩니다 나는 그것을 두 가지를 구현했습니다. 당연히 콘솔 로그는 예제를위한 것일 뿐이며, 실제로 수행하려는 작업과 관련된 실제 문제를 만듭니다. 누구든지이 지연에 대한 간단한 해결책을 알고 있습니까?

감사합니다.

+1

가능한 복제본 [비동기 호출에서 응답을 반환하는 방법] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous- 호출) –

+0

[비동기 호출에서 응답을 반환하는 방법] 참고 (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) 중복 값은 반환 값을 사용하지 않아도 적용됩니다. 비동기 함수에서 반환 된 후에도 여전히 문제가 발생할 것으로 예상됩니다. –

+1

Ember Data의 API 중 일부는 ** 동기식 **이므로 즉시 반환되는 값을 의미합니다. 예를 들어,'peekRecord'. 'findRecord'는 ** 비동기 **입니다. 즉, 약속을 반환하고, 모든 처리는'then' 절 내에서 이루어져야합니다. –

답변

1

물론입니다. 비동기 동작입니다. 그것은 따라서 결과는, findRecord()에서 반환 약속을 해결하기 위해 약간의 시간이 소요 : 비동기 호출 약속이 findRecord()에서 반환 그동안

this.store.findRecord(); //synchronous 
console.log('we are here'); //synchronous 

가 해결됩니다 (비동기 행동)

console.log(admin.get('season')); 
0

것 코드가 진행되는 것을 멈추지 말아야합니다. 그렇지 않으면 데이터를로드하는 동안 UI 업데이트와 사용자 상호 작용을 차단합니다.

관련 문제