비동기 유성 메서드 호출
10240 단어 asyncjavascriptmeteor
Meteor.call
메서드도 마찬가지입니다. Promise 기반 접근 방식으로 쉽게 래핑할 수 있습니다.export const callMethod = ({ name, args }) =>
new Promise((resolve, reject) => {
Meteor.call(name, args, (error, result) => {
if (error) {
return reject(error)
}
return resolve(result)
})
})
Meteor.call
는 여러 인수를 지원하지만 코드를 보다 표현적으로 유지하기 위해 명명된 인수와 함께 단일 개체를 전달하는 것을 선호합니다.그런 다음 비동기 환경에서 기본적으로
callMethod
를 사용할 수 있습니다.Template.myTemplate.events({
'click .some-button': async function (event, templateInstance) {
const age = await callMethod({
name: 'getAge',
args: { name: 'John Doe' }
})
console.log(age) // whatever the method returned
}
})
또한 이러한 호출에 "연결"할 수 있으므로 콜백을 약속과 혼합하고 메서드 호출이 사용자 상호 작용의 일부일 때 적절한 UX 경험을 생성할 수 있습니다.
export const callMethod = ({ name, args, prepare, receive, success, failure }) => {
// before call
if (typeof prepare === 'function') {
prepare()
}
// create the promise
const promise = new Promise((resolve, reject) => {
Meteor.call(name, args, (error, result) => {
// on received
if (typeof receive === 'function') {
receive()
}
if (error) {
return reject(error)
}
return resolve(result)
})
})
// on success
if (typeof success === 'function') {
promise.then(success)
}
// on error
if (typeof failure === 'function') {
promise.catch(failure)
}
return promise
}
그런 다음 코드를 사용하여 예를 들어 "대기 중"표시기를 표시할 수 있습니다.
Template.myTemplate.events({
'click .update-button': async function (event, templateInstance) {
const updatedDoc = await callMethod({
name: 'updateUser',
args: { name: 'John Doe', age: 42 },
prepare: () => templateInstance.state.set('updating', true),
receive: () => templateInstance.state.set('updating', false),
failure: er => alert(er),
success: () => alert('updated')
})
// process updatedDoc if desired
})
Reference
이 문제에 관하여(비동기 유성 메서드 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jankapunkt/async-meteor-method-calls-24f9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)