14

MeteorJSのスタブメソッドとは?

データベース呼び出しを含めると非スタブになるのはなぜですか? ありがとう!

4

2 に答える 2

29

ドキュメントで言及されているものを意味していると思いますか?スタブは、 で定義されたものMeteor.methodsです。

Meteor では、これらのスタブを使用してレイテンシを補正できます。これは、これらのスタブのいずれかを呼び出すとMeteor.call、サーバーがスタブの戻り値で応答するまでに時間がかかる場合があることを意味します。クライアントでスタブを定義すると、クライアント側で遅延補正をシミュレートできる何かを行うことができます。

つまり、私は持つことができます

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 回実行されても、2 つのドキュメントを挿入することなくこれを行うことができます。

挿入が失敗した場合、サーバー側が勝ち、サーバーが応答した後、クライアント側が自動的に削除されます。

于 2013-07-07T09:41:50.603 に答える
8

上記のコードでは、サーバーとクライアントの両方で実行されるこれを記述できます。特定のタスクを実行する必要がある場合は、 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);
    }
});
于 2013-07-08T06:42:40.743 に答える