Meteor.methods()是否保留因果关系?

Meteor.methods()是否保留因果关系?,meteor,Meteor,我是否可以假设对Meteor方法的调用将完全按照它们在客户端上发布的顺序在服务器上执行?换句话说:流星方法保留因果关系吗 编辑:不管答案是什么-除非我在文档中忽略了它,否则这可能会出现在文档中。注意:我认为下面的内容是正确的,但我还无法在代码中确认。我想从流星核心小组得到更多的信息 也就是说,这是我最初的想法: 如果在服务器上调用方法而不使用this.unblock,则该函数将同步运行,从而阻止所有其他服务器端调用。这是唯一可以保证Meteor.method调用顺序的场景。给一个很好的概述 否则

我是否可以假设对Meteor方法的调用将完全按照它们在客户端上发布的顺序在服务器上执行?换句话说:流星方法保留因果关系吗


编辑:不管答案是什么-除非我在文档中忽略了它,否则这可能会出现在文档中。

注意:我认为下面的内容是正确的,但我还无法在代码中确认。我想从流星核心小组得到更多的信息

也就是说,这是我最初的想法:

如果在服务器上调用方法而不使用
this.unblock
,则该函数将同步运行,从而阻止所有其他服务器端调用。这是唯一可以保证Meteor.method调用顺序的场景。给一个很好的概述

否则,使用
this.unblock
方法将在服务器上异步运行,因此您将没有订购保证

但是,我还没有在我的代码中确认这一点。不管服务器端代码中的
this.unblock
,控制台都会按第一、第二、第三顺序记录消息。在服务器上,我希望订单是第一秒到第三秒

if (Meteor.isServer) {
    Meteor.methods({
        first: function() {
            console.log("server first");
            return "right away";
        },
        second: function () {
            this.unblock();
            for(var i = 0; i < 10000000; i++) {}
            console.log("server second");
            return "second one";
        },
        third: function () {
            console.log("server third");
            return "last";
        },
    });
}

if (Meteor.isClient) {
    Meteor.startup(function() {
        Meteor.call("first", function(error, result) {
            console.log("first completed: " + result);
        });
        Meteor.call("second", function(error, result) {
            console.log("second completed: " + result);
        });
        Meteor.call("third", function (error, result) {
            console.log("third completed: " + result);
        });
    });
}
if(Meteor.isServer){
流星法({
第一:函数(){
log(“服务器优先”);
立即返回;
},
第二:功能(){
这是unblock();
对于(var i=0;i<10000000;i++){}
log(“服务器秒”);
返回“第二个”;
},
第三:功能(){
log(“第三服务器”);
返回“最后”;
},
});
}
if(Meteor.isClient){
Meteor.startup(函数(){
Meteor.call(“第一”,函数(错误,结果){
console.log(“第一次完成:+结果”);
});
Meteor.call(“秒”,函数(错误,结果){
控制台日志(“第二次完成:+结果);
});
Meteor.call(“第三”,函数(错误,结果){
控制台日志(“第三次完成:+结果);
});
});
}

注意:我认为以下内容是正确的,但我还无法在我的代码中确认。我想从流星核心小组得到更多的信息

也就是说,这是我最初的想法:

如果在服务器上调用方法而不使用
this.unblock
,则该函数将同步运行,从而阻止所有其他服务器端调用。这是唯一可以保证Meteor.method调用顺序的场景。给一个很好的概述

否则,使用
this.unblock
方法将在服务器上异步运行,因此您将没有订购保证

但是,我还没有在我的代码中确认这一点。不管服务器端代码中的
this.unblock
,控制台都会按第一、第二、第三顺序记录消息。在服务器上,我希望订单是第一秒到第三秒

if (Meteor.isServer) {
    Meteor.methods({
        first: function() {
            console.log("server first");
            return "right away";
        },
        second: function () {
            this.unblock();
            for(var i = 0; i < 10000000; i++) {}
            console.log("server second");
            return "second one";
        },
        third: function () {
            console.log("server third");
            return "last";
        },
    });
}

if (Meteor.isClient) {
    Meteor.startup(function() {
        Meteor.call("first", function(error, result) {
            console.log("first completed: " + result);
        });
        Meteor.call("second", function(error, result) {
            console.log("second completed: " + result);
        });
        Meteor.call("third", function (error, result) {
            console.log("third completed: " + result);
        });
    });
}
if(Meteor.isServer){
流星法({
第一:函数(){
log(“服务器优先”);
立即返回;
},
第二:功能(){
这是unblock();
对于(var i=0;i<10000000;i++){}
log(“服务器秒”);
返回“第二个”;
},
第三:功能(){
log(“第三服务器”);
返回“最后”;
},
});
}
if(Meteor.isClient){
Meteor.startup(函数(){
Meteor.call(“第一”,函数(错误,结果){
console.log(“第一次完成:+结果”);
});
metero.call(“second”,函数(错误,结果){
控制台日志(“第二次完成:+结果);
});
Meteor.call(“第三”,函数(错误,结果){
控制台日志(“第三次完成:+结果);
});
});
}

在给定的客户机/服务器连接上,服务器按顺序处理来自客户机的消息(方法调用、sub/unsub请求等)。在发生以下两种情况之一之前,服务器不会开始处理消息N+1:

  • 它完成了对消息N的处理。对于方法,这意味着方法体完成运行。对于订阅,这意味着发布处理程序完成运行
  • 消息N是一个方法调用,方法体调用this.unblock

(我们可以想象未来会放松这些限制,以便并行处理多个订阅方法,例如。)

在给定的客户机/服务器连接上,服务器按顺序处理来自客户机的消息(方法调用、sub/unsub请求等)。在发生以下两种情况之一之前,服务器不会开始处理消息N+1:

  • 它完成了对消息N的处理。对于方法,这意味着方法体完成运行。对于订阅,这意味着发布处理程序完成运行
  • 消息N是一个方法调用,方法体调用this.unblock

(你可以想象将来会放宽这些限制,以便并行处理多个订阅方法,例如。)

。谢谢!一旦你得到回复,你会在这里更新你的答案吗?我当然会的,先生:)仅供参考——上面发帖的大卫·格拉瑟是核心开发者之一。你可以跟随评论线程进行更新。这仍然是单线程JavaScript。调用
unblock
允许服务器处理更多消息。。。但是它仍然必须实际地到达处理消息的代码,例如通过让步。如果在
this.unblock
之后插入
Meteor.\u sleepForMs(1)
,则应在第二个之前看到第三个。(此调用使用光纤在1ms内产生,在产生期间,事件循环将运行并引入下一条消息。)数据库调用也将产生