Meteor 方法在返回包装在回调中时不返回返回值
Meteor method not returning return value when return wrapped in a callback
当我将返回包装在回调中时,我无法让服务器 Meteor.method 返回成功的响应。
当未包装在回调中时,它可以正常工作。
它可以在包装在回调和未包装在回调时抛出新的 Meteor.errors。
以完全相同的方式在客户端包装 Meteor.call 可以正常工作。
但是,由于某种原因,在调用 return 时,在服务器上执行此操作不会返回响应值。
下面是一个示例。 这不是我的确切代码,但非常接近。 虽然非常接近。
Meteor.methods({
insertData: insertData
});
function insertData(params){
validateParams(params, function(bool, msg){
if(bool){
//do stuff, like insert records
result = 'thanks a million gagillions';
console.log(result);
return result;
} else {
throw new Meteor.Error(513, msg);
}
});
}
validateParams(params, callback){
for (var key in params) {
value = params[key];
if(_.isEmpty(value) || _.isUndefined(value) || _.isNull(value)) {
callback(false, 'Please enter your "'+ key + '".');
return;
}
}
callback(true);
}
如何使其工作以返回结果?
你的问题是 return 语句属于你传递给validateParams
的函数。它不属于insertData
函数。
如果拆分代码部分,则可以更好地看到这一点:
function insertFunc(bool, msg) {
// do your work
return result;
}
function insertData(params) {
validateParams(params, insertFunc);
// no return statement..
}
你需要在 validateParams
中传播回调的返回值:
validateParams(params, callback){
for (var key in params) {
value = params[key];
if(_.isEmpty(value) || _.isUndefined(value) || _.isNull(value)) {
return callback(false, 'Please enter your "'+ key + '".'); // <----- here
}
}
return callback(true); // <---- and here
}
然后在函数中返回validateParams
的结果:
function insertData(params){
return validateParams(params, function(bool, msg) {
// your code..
});
}
注意:抛出异常有效,因为这些异常会传播到到达 try/catch 块。
这里不需要回调。 您可能会发现直线代码更具可读性。
Meteor.methods({
insertData: insertData
});
function insertData(params){
// run validator, allow exception to propagate
validateParams(params);
//do stuff, like insert records
result = 'thanks a million gagillions';
console.log(result);
return result;
}
function validateParams(params){
for (var key in params) {
value = params[key];
if(_.isEmpty(value) || _.isUndefined(value) || _.isNull(value))
throw new Meteor.Error('Please enter your "'+ key + '".');
}
// not strictly necessary, just don't throw exception.
return true;
}
相关文章:
- AJAX:$_GET不返回任何值
- 在刚刚调用的append函数之后,jquery.height()不会返回实际值
- 如何将返回的值应用于多个不同位置的多个选择器
- angular.注射器阵列值未返回当前值
- Model中的Typeahead返回空值以形成输入字段
- 如何匹配多个值使用正则表达式返回单个值
- (extjs)获取表单中单选按钮的选定值.不返回该值
- Javascript对象返回垃圾值
- JQuery BlockUI鼠标加载光标没有't在Google Chrome中返回默认值
- jQuery.val()未返回预期值
- 多个if语句根据URL返回css值
- 从js中的对象返回一个值
- 如何在另一个任务中正确使用延迟的gump任务返回的值
- 使用this和onclick()时不能返回id值
- 如何返回此值
- 从 angularjs 中的嵌套成功函数返回一个值
- 仅使用特定参数返回特定值
- JavaScript元素遍历返回的值超出预期
- 为什么数据列表选项的id返回空值
- 如何从Map返回默认值