때때로 Meteor.call을 writeMeLater
에 대기 시켜서 동 기적으로 실행해야합니다 (동일한 클라이언트의 writeMeLater
에 대한 다른 호출을 차단).Meteor.methods 동기 및 비동기 확인
다른 번에 writeMeLater
에 대한 호출은 현재 대기중인 모든 호출 뒤에 대기열없이 가능한 빨리 실행되어야합니다.
다음은 매개 변수가 true 인 경우 this.unblock()
을 사용하여 시도한 것입니다. 케이스 1과 2는 잘 작동합니다. 그러나 사례 3의 경우 async=true
이 포함 된 통화가 async=false
과 통화 대기 중입니다. async=true
으로 전화를 걸려면 어떻게해야합니까? 이
모든 Meteor.call()
사례 1 (정확하게 동기) :
Meteor.call('writeMeLater', 's', false)
Meteor.call('writeMeLater', 's', false)
Meteor.call('writeMeLater', 's', false)
케이스 2 (정확하게 비동기)
Meteor.call('writeMeLater', 'a', true)
Meteor.call('writeMeLater', 'a', true)
Meteor.call('writeMeLater', 'a', true)
,174,
사례 3 (하지 원하는 동작)
Meteor.call('writeMeLater', 's', false)
Meteor.call('writeMeLater', 's', false)
Meteor.call('writeMeLater', 's', false)
Meteor.call('writeMeLater', 'a', true)
Meteor.call('writeMeLater', 'a', true)
Meteor.call('writeMeLater', 'a', true)
서버/main.js
writeMeLater = function(data, callback) {
console.log('writeMeLater: ', data)
// simulate taking 3 second to complete
Meteor.setTimeout(function() {
Logs.insert({data: data, timestamp: new Date().getTime()})
console.log('Log.insert: ', data)
callback(null, 'done')
}, 3 * 1000)
}
writeMeLaterSync = Meteor._wrapAsync(writeMeLater)
Meteor.methods({
writeMeLater: function(data, async) {
if(async)
this.unblock()
writeMeLaterSync(data)
}
})
무엇을 기대합니까? – imslavko
@imslavko 다른 클라이언트의 메서드 호출이 첫 클라이언트의 호출 뒤에 대기열에 넣지 않는 것과 비슷하게 일부 메서드 호출을 대기열에 넣지 않고 즉시 실행할 수 있습니까 – Nyxynyx
정확히 this.unblock() 'call will do - 이전 연결이 완료되기 전에 * start *에 대한 현재 연결을 다른 메서드 호출로 허용합니다. 그것이 내가 본 결과입니다 : http://pastebin.com/gtdgLTGf 그리고 나에게 맞는 것 같습니다. 3 회의 동기 호출의 경우 호출이 완료되기 전에 3 초의 지연이 있습니다. 두 번째 일괄 처리를 위해 - 그들은 모두 같은 시간에 시작하여 3 초 후에 끝납니다. – imslavko