首页 文章

流星同步方法调用

提问于
浏览
1

Meteor关于方法的文档说:

在服务器上,此功能可以同步或异步运行 . 如果省略回调,它将同步运行,并在请求成功完成后返回结果 . 如果请求不成功,则会引发错误 . 这在从Meteor方法中进行服务器到服务器HTTP API调用时非常有用,因为该方法可以根据同步HTTP调用的结果成功或失败 . 在这种情况下,请考虑使用this.unblock()以允许同一连接上的其他方法同时运行 . 在客户端上,必须通过传递回调异步使用此函数 .

但我发现它很模糊且不明显,它只是看起来同步但是使用光纤运行异步,还是真的变得同步?

例如 . 如果我从流星应用程序调用流星应用程序的服务器到服务器DDP方法调用:

const data = anotherMeteorApp.call(...)

上面的代码是否同步,阻止事件循环并减慢速度?如果它在一个方法中,会在该行代码之前添加 this.unblock() 使其异步吗?如果它在collection2钩子中's not in a method (e.g. if it',它会阻止吗?

1 回答

  • 0

    是!上面的代码同步运行(如果没有提到回调 . ),这将减慢操作直到操作完成 . 您可以自己检查通过在服务器上的流星调用中暂停进程来添加 this.unblock() 的影响 .

    您可以使用下面的代码创建一个进程模拟,从服务器上定义的方法( Meteor.method() )执行和返回需要花费太多时间 .

    var breakTime = 20000; // 20 secs
    var Future = Npm.require('fibers/future');
    var fut = new Future();
    
    var pause = new Promise(function(resolve, reject) {
      setTimeout(() => resolve(1), breakTime);
    });
    pause.then((1) => {
       fut.return(true);
    });
    let waitHere = fut.wait();
    return true;
    

相关问题