Метеоритный синтаксис 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, требующих обратного вызова в качестве последнего аргумента, чтобы они выглядели синхронно благодаря использованию Futures, Подбиблиотека Fibers. (подробнее об этом здесь: https://www.discovermeteor.com/blog/wrapping-npm-packages/)

Он не предназначен для использования на стороне клиента, чтобы стать асинхронным Meteor.call в синхронный вызов, потому что в браузере вызовы удаленного вызова метода ВСЕГДА асинхронны.

Короче говоря, вы просто не можете достичь того, что пытаетесь сделать, вы должны использовать обратные вызовы и вкладывать свой второй вызов метода в обратный вызов успеха вашего первого вызова метода.

Другие вопросы по тегам