Что такое метод заглушки в MeteorJS?

Что такое метод заглушки в MeteorJS?

Почему включение вызова базы данных делает его незавершенным? Спасибо!

Ответы

Ответ 1

Я думаю, вы имеете в виду те, о которых говорится в docs? Окурки - это те, которые определены через Meteor.methods.

В Meteor эти заглушки позволяют вам получить компенсацию за задержку. Это означает, что при вызове одного из этих заглушек с Meteor.call может потребоваться некоторое время для ответа сервера с возвращаемым значением заглушки. Когда вы определяете заглушку на клиенте, вы можете сделать что-то на стороне клиента, что позволяет имитировать компенсацию задержки.

I.e Я могу иметь

var MyCollection = new Meteor.collection("mycoll")
if(Meteor.isClient) {
    Meteor.methods({
        test:function() {
            console.log(this.isSimulation) //Will be true
            MyCollection.insert({test:true});
        }
    });
}

if(Meteor.isServer) {
    Meteor.methods({
        test:function() {
            MyCollection.insert({test:true});
        }
    });
}

Таким образом, документы будут вставлены как на клиент, так и на сервер. Тот, который на клиенте будет отображаться "мгновенно", даже если сервер не ответил, вставлен ли он или нет.

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

Если вставка терпит неудачу, выигрывает серверная сторона, и после того, как сервер ответит на клиентскую сторону, она будет удалена автоматически.

Ответ 2

В приведенном выше коде вы можете написать это, которое будет запущено как на сервере, так и на клиенте, используйте isSimulation для идентификации на той стороне, на которой вы находитесь, если вам нужно выполнить определенную задачу:

var MyCollection = new Meteor.collection("mycoll")
Meteor.methods({
    test:function() {
        console.log(this.isSimulation) //Will be true on client and false on server
        var colItem = {test:true, server: true};
        if (this.isSimulation) {
            colItem.server = false;
        }
        MyCollection.insert(colItem);
    }
});