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
Api 如何判断Accounts.addEmail是否成功,如果失败,原因是什么_Api_Meteor_Accounts_User Feedback - Fatal编程技术网

Api 如何判断Accounts.addEmail是否成功,如果失败,原因是什么

Api 如何判断Accounts.addEmail是否成功,如果失败,原因是什么,api,meteor,accounts,user-feedback,Api,Meteor,Accounts,User Feedback,我有一个页面,用户可以在其中键入新的电子邮件地址,然后此方法尝试将其添加到其帐户: Meteor.methods({ add_new_email: function(address) { Accounts.addEmail(Meteor.userId(), address); } }); 我正在使用Meteor中的帐户密码包 我想在用户尝试添加新地址后给他们有意义的反馈,特别是如果失败了为什么失败了?我已经看过了,但似乎没有任何方法来找出失败的原因 我知道我可以在尝试添加新

我有一个页面,用户可以在其中键入新的电子邮件地址,然后此方法尝试将其添加到其帐户:

Meteor.methods({
  add_new_email: function(address)
  {
    Accounts.addEmail(Meteor.userId(), address);
  }
});
我正在使用Meteor中的帐户密码包

我想在用户尝试添加新地址后给他们有意义的反馈,特别是如果失败了为什么失败了?我已经看过了,但似乎没有任何方法来找出失败的原因

我知道我可以在尝试添加新地址之前和之后计算用户的电子邮件地址,但这并不能告诉我该地址是否已经属于另一个用户,或者它是否是该用户的现有地址,或者故障原因是什么


有没有办法找出这样一个API调用的结果?

您可以在这里阅读有关此方法的功能的信息:

如您所见,该方法仅在一种情况下失败:

如果有其他用户使用电子邮件,则操作将失败 只是以防万一


因此,如果此方法失败,您可以告诉用户电子邮件已注册。

您可以在此处阅读有关此方法的功能的信息:

如您所见,该方法仅在一种情况下失败:

如果有其他用户使用电子邮件,则操作将失败 只是以防万一


因此,如果该方法失败,您可以告诉用户电子邮件已经注册。

在尝试了更多之后,似乎我所需要做的就是在调用该方法时向我的客户端添加一个回调,并在那里检查是否有错误。任何错误都会自动返回回叫

服务器:

Meteor.methods({
  add_new_email: function(address)
  {
    Accounts.addEmail(Meteor.userId(), address);
  }
});
客户:

Meteor.call('add_new_email', 'me@example.com', function(error){
  if (error) console.log("got an error " + error.reason);
});
我没有意识到API中的错误会传递到我的方法中。流星-它总是比我想象的更聪明

另外请注意,您可以在方法中使用Meteor.Error抛出错误,这些错误将以完全相同的方式传递给客户端回调,请参阅:


在进行了更多的实验之后,似乎我所需要做的就是在调用该方法时向我的客户机添加一个回调,并在那里检查是否有错误。任何错误都会自动返回回叫

服务器:

Meteor.methods({
  add_new_email: function(address)
  {
    Accounts.addEmail(Meteor.userId(), address);
  }
});
客户:

Meteor.call('add_new_email', 'me@example.com', function(error){
  if (error) console.log("got an error " + error.reason);
});
我没有意识到API中的错误会传递到我的方法中。流星-它总是比我想象的更聪明

另外请注意,您可以在方法中使用Meteor.Error抛出错误,这些错误将以完全相同的方式传递给客户端回调,请参阅:


我知道我参加聚会有点晚了,但我今天遇到了这个问题,找到了你的帖子

我需要能够在服务器端判断它是否失败,所以我所做的是将它放入一个try-catch中,如下所示:

let addSucceeded = false;

try{
    Accounts.addEmail(user._id, newEmailAddress);
    addSucceeded = true;
} catch(err) {}

console.log(addSucceeded);

仅当Accounts.addEmail未失败时,addsucceed才会设置为true。为了确保我不会遇到“因为它在不同情况下替换了同一用户的电子邮件地址而失败”的情况,我在保存时总是将电子邮件地址小写。

我知道我参加聚会有点晚,但我今天遇到了这个问题,找到了你的帖子

我需要能够在服务器端判断它是否失败,所以我所做的是将它放入一个try-catch中,如下所示:

let addSucceeded = false;

try{
    Accounts.addEmail(user._id, newEmailAddress);
    addSucceeded = true;
} catch(err) {}

console.log(addSucceeded);

仅当Accounts.addEmail未失败时,addsucceed才会设置为true。为了确保我不会遇到“因为它在不同情况下替换了同一用户的电子邮件地址而失败”的情况,我在保存时总是将电子邮件地址小写。

但是我如何知道该方法失败?我可以计算用户在操作前后有多少封电子邮件,但我可以从文档中看到,在两种情况下,用户的电子邮件地址数不会改变:要么操作失败,要么用户已经有一个电子邮件地址,只是大小写与新值不同。现在,如果地址数没有改变,并且在用户的地址列表中找到了新地址,我假设失败,但我不知道这是否可靠。但是我怎么知道方法失败了呢?我可以计算用户在操作前后有多少封电子邮件,但我可以从文档中看到,在两种情况下,用户的电子邮件地址数不会改变:要么操作失败,要么用户已经有一个电子邮件地址,只是大小写与新值不同。现在,如果地址的数量没有改变,并且在用户的地址列表中找到了新地址,我假设失败,但我不知道这是否可靠。