Метеоритный синтаксис wrapAsync
Как использовать Meteor wrapAsync?
Ниже то, что я пытаюсь сделать
if (tempTreatment.groupId === undefined) {
// create new group
Meteor.wrapAsync(Meteor.call('createTreatmentGroup', salon, tempTreatment.groupName, tempTreatment.groupName));
// get group id
var getGroup = Meteor.wrapAsync(Meteor.call('getTreatmentGroup', salon, tempTreatment.groupName));
console.log(getGroup);
tempTreatment.groupId = getGroup._id;
}
Я хочу запустить эти два Meteor.call
работает синхронно, но я получаю undefined
на console.log(getGroup);
который должен просто вернуть объект.
1 ответ
Meteor.wrapAsync
это серверный API, предназначенный для обертывания асинхронных функций Node.js, требующих обратного вызова в качестве последнего аргумента, чтобы они выглядели синхронно благодаря использованию Future
s, Подбиблиотека Fibers. (подробнее об этом здесь: https://www.discovermeteor.com/blog/wrapping-npm-packages/)
Он не предназначен для использования на стороне клиента, чтобы стать асинхронным Meteor.call
в синхронный вызов, потому что в браузере вызовы удаленного вызова метода ВСЕГДА асинхронны.
Короче говоря, вы просто не можете достичь того, что пытаетесь сделать, вы должны использовать обратные вызовы и вкладывать свой второй вызов метода в обратный вызов успеха вашего первого вызова метода.