我正在使用Meteor。正如您在Github上的ValidatedMethod自述文件中看到的那样,它在调用方法时使用了returnStubValue选项,但它似乎对我不起作用。我想知道你对它的看法。
我上传了一个简单的Meteor项目,可以在Github上重现问题:Link to the repository
这是我的服务器端方法:
export const createTodo = new ValidatedMethod({
name: 'todos.create',
validate: new SimpleSchema({
todo: String,
}).validator(),
run({ todo }) {
if (this.isSimulation) {
return { finished: false };
}
Todos.insert({ todo });
return { finished: true };
},
});
这是一个在todos集合中插入待办事项的简单方法。在客户端,我立即返回一个对象{ finished: false }
。在服务器端,我更新我的数据库,然后返回一个对象{ finished: true }
这是我的客户端方法调用:
createTodo.call({ todo }, (err, res) => {
console.log(res);
});
我只是调用方法和console.log结果。 因为我使用的是使用returnStubValue
选项的mdg:validated-method ,我想我的控制台应输出finished: false
,然后输出finished: true
。但它实际上只输出finished: true
。
我有什么不明白的地方吗?
答案 0 :(得分:0)
mdg:validated-method
表现不错。如果您在不引入Meteor.apply
的情况下调用(实际validated-method
)常规Meteor方法,则会观察到相同的结果。
这是事情。在流星的documentation,
方法模拟的返回值被丢弃,除非 调用Method时传递returnStubValue选项,其中 如果返回到Method调用者。 ValidatedMethod传递此信息 默认选项。
注意粗体。在您的示例项目中,模拟中返回的对象{ finished: false }
是调用的返回值,而不是回调。因此,以下转换如何进行客户端调用
const ret = createTodo.call({ todo }, (err, res) => {
console.log('res', res);
});
console.log('ret', ret);
将打印
ret, {finished, false}
res, {finished, true}
控制台上的。通过等待没有服务器结果使UI变得乐观。这种行为是完全有道理的,不是吗?
好问题!