【问题标题】:Correct usage of Meteor wrapAsyncMeteor wrapAsync 的正确使用
【发布时间】:2015-08-01 22:28:04
【问题描述】:

以下是我想要做的:

var joinNetwork = function (obj) {
  Meteor.call("joinNetwork", {
    userId: obj.userId,
    domain: obj.domain
  }, function (err, networkId) {
    return networkId;
  });
}    

Accounts.onCreateUser(function (options, user) {
  var userId = user._id;
  var email = options.email;
  var domain = Utils.getDomain(email);
  var joinNetworkSync = Meteor.wrapAsync(joinNetwork);

  // works fine until here

  var networkId = joinNetworkSync({
    userId: userId,
    domain: domain
  });

  // never get here
  debugger

如您所见,在我调用joinNetworkSync 之后,我再也没有找到它之后的代码。换句话说,networkId 永远不可用。我做错了什么?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    要从wrapAsync 返回,您必须调用传递给该函数的回调:

    Meteor.wrapAsync(function (obj, done) {
      Meteor.call("joinNetwork", {
        userId: obj.userId,
        domain: obj.domain
      }, function (err, networkId) {
        done(networkId);
      });
    })
    

    你不需要在这里包装 async 面团。当您调用流星方法服务器端时,它们会像正常函数一样返回。如果joinNetwork 方法定义正确,您就可以这样做:

    Accounts.onCreateUser(function (options, user) {
      var userId = user._id;
      var email = options.email;
      var domain = Utils.getDomain(email);
      var networkId = Meteor.call("joinNetwork", {
        userId: obj.userId,
        domain: obj.domain
      });
      ...
    })
    

    【讨论】:

    • 我不知道Meteor.call 不需要服务器端的回调。一个额外的问题。如果该 Meteor.call 返回错误,我该如何访问它?我应该把它包裹在 try and catch 块上吗?
    【解决方案2】:

    我认为您的 joinNetwork 同步版本没有返回任何内容。您在另一个函数中放置了一个 return,即 joinNetwork 的回调。尝试将下一部分拆分到另一个函数中,然后使用 networkId 在回调函数中调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      相关资源
      最近更新 更多