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