Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor Iron Route waitOn函数中的捕捉错误_Javascript_Meteor_Iron Router - Fatal编程技术网

Javascript Meteor Iron Route waitOn函数中的捕捉错误

Javascript Meteor Iron Route waitOn函数中的捕捉错误,javascript,meteor,iron-router,Javascript,Meteor,Iron Router,我有一个meteor发布函数,我在发布函数中抛出一个错误,让订阅者捕获。我使用的是iron router,在“waitOn”函数中,我订阅了出版物。出于某种原因,当我从发布中抛出错误时,没有调用我的错误函数,我不知道为什么。非常感谢您的帮助 这是我的订阅路线(到'assignmentsByGroup')和我的on error函数(OneErrorFunction): 以下是我的发布功能: Meteor.publish("assignmentsByGroup", function(groupId)

我有一个meteor发布函数,我在发布函数中抛出一个错误,让订阅者捕获。我使用的是iron router,在“waitOn”函数中,我订阅了出版物。出于某种原因,当我从发布中抛出错误时,没有调用我的错误函数,我不知道为什么。非常感谢您的帮助

这是我的订阅路线(到
'assignmentsByGroup'
)和我的on error函数(
OneErrorFunction
):

以下是我的发布功能:

Meteor.publish("assignmentsByGroup", function(groupId)
{
try
{
  if(_.contains(Groups.findOne({_id: groupId}).members, this.userId))
    {
        return Assignments.find({group: groupId});
    }
    else
    {
    var errorToThrow = new Meteor.Error(401, "Access denied: you cannot view assignments unless you are a member of this group.");
        this.error(errorToThrow);
    }
}
catch(err)
{
  this.error(err);
}
});

卸下try/catch块。您已经在返回发布或错误的函数中

当您执行try/catch时,您抛出的实际错误(Meteor.error)被捕获并作为常规javascript错误传递/抛出到catch中


但是订阅正在等待正确的Meteor。错误

请删除try/catch块。您已经在返回发布或错误的函数中

当您执行try/catch时,您抛出的实际错误(Meteor.error)被捕获并作为常规javascript错误传递/抛出到catch中


但是订阅正在等待正确的Meteor。错误

问题在于我的onError回调语法。我向订阅方法传递了一个函数,该函数被解释为onReady函数,只有在publish函数中调用this.ready()时才会调用。我将Meteor.subscribe('assignmentsByGroup',this.params.groupId,onErrorfunction)更改为
Meteor.subscribe('assignmentsByGroup',this.params.groupId,{onError:onErrorfunction})
,它成功了!此外,您还可以在publish函数中使用try-and-catch语句;无论有无错误,仍会正确抛出错误,但通过它,您还可以捕获其他内部服务器错误。

问题在于我的OneError回调语法。我向订阅方法传递了一个函数,该函数被解释为onReady函数,只有在publish函数中调用this.ready()时才会调用。我将Meteor.subscribe('assignmentsByGroup',this.params.groupId,onErrorfunction)更改为
Meteor.subscribe('assignmentsByGroup',this.params.groupId,{onError:onErrorfunction})
,它成功了!此外,您还可以在publish函数中使用try-and-catch语句;无论有无错误,仍会正确抛出错误,但通过它,您还可以捕获其他内部服务器错误。

这似乎很明显,但您确定您的发布函数已到达else块吗?你能用那里的console.log确认吗?我刚检查过,它正在到达else块,所以这不是问题所在。这看起来很明显,但是你确定你的发布函数到达了else块吗?你能用那里的console.log来确认吗?我刚刚检查过,它正在到达else块,所以这不是问题所在。不幸的是,这似乎没有解决问题。即使在删除try/catch语句之后,仍然没有调用OneErrorFunction(回调)。我的OneError回调语法正确吗?看起来非常正确,我想不出这不起作用的原因:(不幸的是,这似乎并没有解决问题。即使删除try/catch语句,OneErrorFunction(回调)仍然有效)仍然没有被调用。我的OneError回调语法正确吗?看起来非常正确,我想不出这不起作用的原因:(
Meteor.publish("assignmentsByGroup", function(groupId)
{
try
{
  if(_.contains(Groups.findOne({_id: groupId}).members, this.userId))
    {
        return Assignments.find({group: groupId});
    }
    else
    {
    var errorToThrow = new Meteor.Error(401, "Access denied: you cannot view assignments unless you are a member of this group.");
        this.error(errorToThrow);
    }
}
catch(err)
{
  this.error(err);
}
});