Meteor.bindEnvironment中的服务器中的错误时,无法捕获客户端中的Meteor.Error

普拉莫

Meteor.call当在服务器代码中,发生错误时,我无法在客户端的错误回调中获取错误Meteor.bindEnvironment以下是要复制的示例代码

在服务器中

Meteor.methods({
  customMethod: function(arg1, arg2){
      Stripe.customers.create({
        email: "[email protected],
        description: "blah blah",
        source: token,
        metadata: {
          planId: planId,
          quantity: n
        },
        plan: planId,
        quantity: n
      }, Meteor.bindEnvironment(function (err, customer) {
        if(err){
          console.log("error", err);
          // TODO cannot catch this error on the client
          throw new Meteor.Error(err.rawType, err.message)
        }
      }))
    }
})

在客户端发生流星事件时,

Meteor.call('customMethod', arg1, arg2, function (err, resp) {
 if(err){
   Session.set('some-error', err)
 }
 if(resp){
   // TODO cannot catch errors throwing from the server
   // when inside Meteor.bindEnvironment 
   Session.set('some-success', true)
 }
});

会话变量从不设置。任何帮助将是巨大的。谢谢!

里奇西尔夫

的第二个参数Meteor.bindEnvironment是一个错误处理程序,只要您在作为第一个参数提供的回调中抛出异常,就会调用该错误处理程序。因此,您可以执行以下操作将错误传递回客户端:

Meteor.bindEnvironment(function (err, customer) {
  if (err) throw err
  ...
}, function (err) {
  if (err) throw new Meteor.Error(err.message)
})

更新

抱歉,这有点草率。问题在于您的错误(以及可能的结果)来自异步回调,因此您的方法函数将完成执行,并在回调执行任何操作时隐式返回undefined(将其作为传递给客户端null)。

从历史上看,您会用future解决这个问题,但是现在我们有了更好的承诺:

Meteor.methods({
  customMethod (arg1, arg2) {
    return new Promise((resolve, reject) => {
      Stripe.customers.create({
        email: "[email protected],
        ...
      }, Meteor.bindEnvironment(function (err, customer) {
        if(err){
          reject(err)
        }
        resolve(customer)
      })).catch(e => { throw new Meteor.Error(e) })
  }
})

流星方法足够聪明,可以等待承诺解决或拒绝并通过DDP返回结果(或错误)。您仍然需要捕获错误并正式将其抛出,但是您的方法调用将等待您这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Meteor.js中重新启动Meteor服务器

Iron Router和Meteor中的服务器端路由

使用Meteor将数据从服务器流传输到客户端:

如何在Angular 2 Meteor中从服务器端检测并注销空闲用户?

如何在Meteor中执行服务器端文件处理操作?

Meteor JS中的客户端和服务器端验证

如何在服务器端从Meteor 1.4.4.2和1.5中的HTML生成PDF

如何在Meteor中将数据从客户端发送到服务器?

客户端中的Meteor呼叫服务器方法出现404方法未找到错误

如何在Meteor中访问客户端IP地址?

如何在Meteor中添加或删除集合文档字段服务器端?

将Meteor文件分为客户端和服务器文件夹

在Meteor中创建服务器端文件

在Meteor中的客户端和服务器上生成相同的随机数

Webstorm中的“无法更新Meteor客户端源文件”消息是什么?

是否可以将警报从服务器发送到Meteor中的客户端?

在Meteor服务器端代码中的哪里声明配置

如何在Meteor中将数据从服务器传递到客户端

在Meteor中,服务器端操作完成后如何在客户端知道?

如何在Meteor中从客户端到服务器发出简单的http请求

在Meteor中解析错误的服务器响应

如何在Meteor中的服务器和客户端代码之间共享全局变量

使用angular-meteor通过Meteor.methods在服务器和客户端之间发送数组

Ionic2客户端+ Meteor服务器,哪种方法更好?

Meteor.loginWithFacebook中的内部服务器错误

Meteor minimongo 显示用户在服务器之前登录客户端

Meteor:客户端查看页面时增加 DB 值服务器端

Meteor build 正在将服务器端代码导入客户端

我在终端中收到服务器异常错误 - Meteor