如何在客户端上使用Meteor.wrapAsync?

如何在客户端上使用Meteor.wrapAsync?,meteor,Meteor,在我的Meteor客户端代码中,我尝试使用一个只有异步调用的第三方API。如何在客户端上使用Meteor.wrapAsync以同步方式调用此API?文件似乎表明这是可能的: 以下是我想以同步方式调用的一些示例代码: var func1 = function(callback) { Meteor.setTimeout(function() { console.log('func1 executing'); callback(null, {success: true}); }

在我的Meteor客户端代码中,我尝试使用一个只有异步调用的第三方API。如何在客户端上使用Meteor.wrapAsync以同步方式调用此API?文件似乎表明这是可能的:

以下是我想以同步方式调用的一些示例代码:

var func1 = function(callback) {
  Meteor.setTimeout(function() {
    console.log('func1 executing');
    callback(null, {success: true});
  }, 2000);
};

var func2 = function(callback) {
  Meteor.setTimeout(function() {
    console.log('func2 executing');
    callback(null, {success: true});
  }, 1000);
};

var wrapped1 = Meteor.wrapAsync(func1);
var wrapped2 = Meteor.wrapAsync(func2);

Template.test.rendered = function() {
    wrapped1();
    console.log('After wrapped1()');
    wrapped2();
    console.log('After wrapped2()');
};
目前,这将产生以下输出:

After wrapped1()
After wrapped2()
func2 executing
func1 executing
我希望它能生产:

func1 executing    
After wrapped1()
func2 executing
After wrapped2()

我已经将此代码放在Meteopad中:

Meteor.wrapAsync
在客户端上工作,以实现同构代码。这样,您就可以编写代码,在客户端和服务器上共享,而无需流星崩溃或抱怨

客户端上不可能有同步代码。至少不使用ES6功能,这些功能在所有浏览器上都不可用


正如saeimeunt Meteor.wrapAsync的评论所述,它需要在客户端上进行回调。

这是不可能的,浏览器环境在设计上是异步的,请参阅此答案以了解更多有关为什么
Meteor.wrapAsync
在客户端上定义,但解析为回调行为的信息:因此可以调用客户端,但是,它返回的函数已损坏
无法从客户端进行阻止HTTP调用;需要回调。
,这对我来说并不是同构的!(我知道,不是你的错)。依我看,它可以返回一个承诺返回函数,在客户端aladenodeify上有些有用。