Как выполняются методы Meteor?

следуя этому http://www.angular-meteor.com/tutorials/socially/angular2/meteor-methods

имея:

Meteor.methods({
    invite: function(partyId: string, userId: string) {
        check(partyId, String);
        check(userId, String);

        let party = Parties.findOne(partyId);

        if (!party)
            throw new Meteor.Error('404', 'No such party!');

        if (party.public)
            throw new Meteor.Error('400', 'That party is public. No need to invite people.');

        if (party.owner !== this.userId)
            throw new Meteor.Error('403', 'No permissions!');

        if (userId !== party.owner && (party.invited || []).indexOf(userId) == -1) {
            Parties.update(partyId, { $addToSet: { invited: userId } });

            let from = getContactEmail(Meteor.users.findOne(this.userId));
            let to = getContactEmail(Meteor.users.findOne(userId));

            if (Meteor.isServer && to) {
                Email.send({
                    from: '[email protected]',
                    to: to,
                    replyTo: from || undefined,
                    subject: 'PARTY: ' + party.name,
                    text: `Hi, I just invited you to ${party.name} on Socially.
                        \n\nCome check it out: ${Meteor.absoluteUrl()}\n`
                });
            }
        }
    }
})

то в Party-Detail.ts у нас есть

invite(user:Meteor.User) {
        this.call('invite', this.party._id, user._id, (error) => {
            if (error) {
                alert(`Failed to invite due to ${error}`);
                return;
            }

            alert('User successfully invited.');
        });

    }

Когда пользователь нажимает «Пригласить», как выполняется код?

В клиенте и на сервере одновременно?


person Nassim MOUALEK    schedule 25.01.2016    source источник


Ответы (1)


Предполагая, что ваш Meteor.methods() находится в вашей папке /lib, тогда при вызове метода:

  1. Сначала он будет выполняться на клиенте и возвращать результаты асинхронно без каких-либо сетевых задержек. Это процесс, известный как моделирование.
  2. Затем сервер будет выполнять тот же код асинхронно.
  3. Если результаты на сервере отличаются от результатов на клиенте, сервер даст указание клиенту изменить свои результаты, чтобы они совпадали. (Сервер всегда выигрывает).

Общий эффект называется компенсация задержки. Клиент получает иллюзию (симуляцию) мгновенного результата, в то время как серверу дается время наверстать упущенное в фоновом режиме.

person Michel Floyd    schedule 25.01.2016