这个Meteor服务器代码对外部服务serv2进行DDP调用,一旦得到结果,它就应该发送回进行调用的客户端,但事实并非如此。
什么是最好的解决办法?我应该利用MongoDB的反应性吗?
/////////////////////////// client/main.js \\\\\\\\\\\\\\\\\\\\\\\\\\
Template.hello.events({
'click button'(event, instance) {
Meteor.call('service2', function (err, res) {
if (!err) {
console.log('got it'); //=> prints right away without waiting.
console.log(res); //=> print undefined <==================
instance.msg.set(res);
}
});
}
});
/////////////////////////// server/app.js \\\\\\\\\\\\\\\\\\\\\\\\\\
import { Meteor } from 'meteor/meteor';
import { DDP } from 'meteor/ddp-client';
let serv2 = DDP.connect('localhost:7001');
Meteor.methods({
'service2': function () {
serv2.call('service2', function (err, res) {
if (!err) {
console.log(res); //=> prints OK
return 'service 1 calling service 2 <br> + res'; //<====== failed to return.
}
});
}
});发布于 2016-11-03 10:54:09
这就是正在发生的事情:
service2方法,并在调用回调之前等待DDP响应。service2函数,在该函数中,serv2.call()行向您的:7001服务器发起.call()。serv2.call()立即返回,因为调用是异步的。service2函数现在已经完成,并返回undefined,因为它没有任何返回语句。要使您的设置正常工作,您需要让service2()等待serv2.call()的结果。Meteor.wrapAsync()方法就是为此目的而存在的。见http://docs.meteor.com/api/core.html#Meteor-wrapAsync。
您也可以从这里的讨论中获益:Meteor: Proper use of Meteor.wrapAsync on server
https://stackoverflow.com/questions/40397159
复制相似问题