메서드의 동기 호출을 시도 할 때 완전히 고생했습니다. 서버 측 (단순화 된 버전, 원래는 다른 API 호출)에서 클라이언트 목록을 얻으려고 시도하고 웹 페이지에서이 목록을 인쇄합니다.클라이언트 (각도) 측에서 유성 메서드의 동기 호출
클라이언트 측 코드 (각도 1) :
import template from './clientsList.html';
import {Meteor} from 'meteor/meteor';
class ClientsList {
constructor() {
console.log('First');
Meteor.call('getClients', function (error, response) {
if (error) {
// If our API returned an error, we'd see it in the console.
console.log(error);
} else {
console.log(response);
this.clients = response;
}
});
console.log('Second');
}
}
const name = 'clientsList';
export default angular.module(name, [
angularMeteor
]).component(name, {
template,
controllerAs: name,
controller: ClientsList
})
}
서버 측 코드 (유성) :
import {Meteor} from 'meteor/meteor';
var Future = Npm.require('fibers/future');
Meteor.methods({
// Synchronous method
'getClients': function() {
// Create our future instance.
var future = new Future();
var clients = {[Name: 'Peter']};
future.return(clients);
// preventinvg method from completing until the future receives a value
return future.wait();
}
});
템플릿 :
<ul>
<li ng-repeat="client in clientsList.clients">
{{client.Name}}
</li>
</ul>
미래의 내 사용 할 것 같다 서버 측 코드 작업이 동 기적으로 작동하지 않습니다.
First
Second
Array[1]
가 기대 : : 내 콘솔에서 무엇을 얻을이
First
Array[1]
Second
정말 어떤 도움을 부탁드립니다.
코드의 동기 섹션에 미래가 있습니다 (완전히 메소드 안에 있음). 귀하의 방법 자체가 비동기 호출을하고 있지만 그렇지 않은 경우 유용합니다. 고객에게 약속이 필요합니다. 또한 메소드 이름 ('getClients')은 pub-sub를 사용할 수있을 때 데이터를 가져 오는 메소드를 사용한다는 것을 의미합니다. –
@MichelFloyd, OP는 원래 서버 코드가 API를 호출하므로 잠재적으로 비동기식임을 나타냅니다. @OP, API 호출을 할 때 [http 패키지] (https://docs.meteor.com/api/http.html)를 서버에서 동기식으로 사용할 수 있습니다. 타사 API 라이브러리를 사용하는 경우에도 ['wrapasync'] (https://docs.meteor.com/api/core.html#Meteor-wrapAsync)를 사용하여 포장 할 수 있지만'Future'를 사용하면 if 이것이 당신이 선호하는 것입니다. – MasterAM
맞아 그가 클라이언트에서 비동기 호출을하는 코드를 보지만'Meteor.call()'자체 때문에 서버에서 무엇을 하든지 상관없이 발생할 수있는'First, Array [1], Second'를 기대한다. 비동기입니다. –