首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor DDP回调在方法回调中

Meteor DDP回调在方法回调中
EN

Stack Overflow用户
提问于 2016-11-03 08:50:31
回答 1查看 266关注 0票数 1

这个Meteor服务器代码对外部服务serv2进行DDP调用,一旦得到结果,它就应该发送回进行调用的客户端,但事实并非如此。

什么是最好的解决办法?我应该利用MongoDB的反应性吗?

代码语言:javascript
复制
/////////////////////////// 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.
      }
    });
  }
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-03 10:54:09

这就是正在发生的事情:

  • 客户端在服务器上调用service2方法,并在调用回调之前等待DDP响应。
  • 服务器开始运行service2函数,在该函数中,serv2.call()行向您的:7001服务器发起.call()。
  • serv2.call()立即返回,因为调用是异步的。
  • service2函数现在已经完成,并返回undefined,因为它没有任何返回语句。
  • 您的客户端回调将得到此结果并按照您的描述运行。
  • 稍后,对serv2的调用已经完成,并且它的回调将被运行,但是由于没有人在监听它的返回值,所以在空中丢失了.

要使您的设置正常工作,您需要让service2()等待serv2.call()的结果。Meteor.wrapAsync()方法就是为此目的而存在的。见http://docs.meteor.com/api/core.html#Meteor-wrapAsync

您也可以从这里的讨论中获益:Meteor: Proper use of Meteor.wrapAsync on server

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40397159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档