Mongodb MeteorJS:从用户更新中获得成功回调?
所以,我只想知道我的用户更新是否在客户端成功,这样我就可以通知用户更新成功了Mongodb MeteorJS:从用户更新中获得成功回调?,mongodb,meteor,Mongodb,Meteor,所以,我只想知道我的用户更新是否在客户端成功,这样我就可以通知用户更新成功了 //Client Side return Meteor.call('handleUpdateUser', _id, _username, function(err, res) { if (err) { // also, what is best practices for handling these errors? } console.log(res); }); //Server Side Me
//Client Side
return Meteor.call('handleUpdateUser', _id, _username, function(err, res) {
if (err) {
// also, what is best practices for handling these errors?
}
console.log(res);
});
//Server Side
Meteor.methods({
handleUpdateUser(id, username) {
if (check for user...) {
return if found
}
return Meteor.users.update({_id: id}, {$set: {username: username}},
function(err, count, res) {
if (err) {
console.log(err) // again, best practices for handling these errors?
}
return res;
});
}
我当前在客户端的控制台中获得了未定义的
permissions.js:
//Server Side
Meteor.users.allow({
update:function(userId, doc, fields, modifier) {
return userId && doc._id === userId;
}
});
想法?由于您的服务器端方法是异步的,如果不这样处理,您的客户机将看到同步部分的结果,因此您将无法定义。i、 e.在handleUserUpdate()末尾返回的隐式未定义
我使用Future将其视为异步的。e、 g
const Future = Npm.require('fibers/future');
Meteor.methods({
handleUpdateUser(id, username) {
let future = new Future();
Meteor.users.update({_id: id}, {$set: {username: username}}, function(err, res) {
if (err) {
console.log(err);
future.throw(new Meteor.Error('500', err));
}
future.return(res);
});
return future.wait();
}
});
现在,Meteor将等待通知客户机,直到处理好未来,无论是通过返回还是抛出。您的客户端调用应该按照您的预期工作。由于您的服务器端方法是异步的,如果不这样处理,您的客户端将看到同步部分的结果,因此您的客户端调用没有定义。i、 e.在handleUserUpdate()末尾返回的隐式未定义
我使用Future将其视为异步的。e、 g
const Future = Npm.require('fibers/future');
Meteor.methods({
handleUpdateUser(id, username) {
let future = new Future();
Meteor.users.update({_id: id}, {$set: {username: username}}, function(err, res) {
if (err) {
console.log(err);
future.throw(new Meteor.Error('500', err));
}
future.return(res);
});
return future.wait();
}
});
现在,Meteor将等待通知客户机,直到处理好未来,无论是通过返回还是抛出。您的客户电话应按预期工作。来自文档:
在服务器上,如果不提供回调,则更新块
直到数据库确认写入,或者在
出了点问题。如果确实提供了回调,则update将返回
马上。更新完成后,将使用
失败情况下的单个错误参数,或第二个参数
指示更新失败时受影响文档的数量
成功
所以,如果您想等待结果,您应该将update
看作一个同步操作,以避免所有这些未来:
Meteor.methods({
handleUpdateUser(id, username) {
return Meteor.users.update({ _id: id }, { $set: { username: username } });
}
});
如果操作失败,它将抛出一个错误并将其传递给客户端。如果成功,那么它将返回结果
如果要检查错误是什么(在服务器端),请将其包装成常规的文件,然后从文档中尝试{}catch(e){}
:
在服务器上,如果不提供回调,则更新块
直到数据库确认写入,或者在
出了点问题。如果确实提供了回调,则update将返回
马上。更新完成后,将使用
失败情况下的单个错误参数,或第二个参数
指示更新失败时受影响文档的数量
成功
所以,如果您想等待结果,您应该将update
看作一个同步操作,以避免所有这些未来:
Meteor.methods({
handleUpdateUser(id, username) {
return Meteor.users.update({ _id: id }, { $set: { username: username } });
}
});
如果操作失败,它将抛出一个错误并将其传递给客户端。如果成功,那么它将返回结果
如果您想检查错误是什么(在服务器端),然后将其包装成一个常规的try{}catch(e){}
,因此,上面的代码仍然是undefined
。所以我控制台了res,我在服务器上得到了未定义的。。。我将回调更改为(err,res)
,现在我返回1
,err为null
。我将使用1作为布尔值向前移动,以在客户端触发一条消息。谢谢你的建议。以前,即使在尝试获取计数时,我也得到了未定义的
,因此这确实有帮助;我编辑了我的帖子以删除它。是的,通常这样的调用实际上不会返回任何数据,但成功路径表示它已完成并成功。我一直在使用这种模式。因此,我仍然在使用上面的未定义的。所以我控制台了res,我在服务器上得到了未定义的。。。我将回调更改为(err,res)
,现在我返回1
,err为null
。我将使用1作为布尔值向前移动,以在客户端触发一条消息。谢谢你的建议。以前,即使在尝试获取计数时,我也得到了未定义的
,因此这确实有帮助;我编辑了我的帖子以删除它。是的,通常这样的调用实际上不会返回任何数据,但成功路径表示它已完成并成功。我一直在用那种模式。