Meteor.call回复的时候很慢
Meteor.call is very slow when responding back
我遇到 Meteor.call() 的性能问题。我在服务器端有一个方法可以在一毫秒内执行,但是当我在客户端寻求响应时,需要很长时间才能在回调函数中获取响应数据。有人以前遇到过这个问题吗?
我之前用的是Meteor 1.12.1,后来更新到Meteor 2.1.1,希望通过更新来解决问题,但是没发现有什么不同。
更新:我在所有环境中都遇到了问题(osx、linux、windows)。
例如:这是我的服务器代码
Meteor.methods({
newEntry() {
//This method is executed within millisecond
}
})
这是我的客户端代码
function submitEntry(data) {
Meteor.call(
'newEntry',
data,
(error, res) => {
//Here I am getting the response after long wait.
},
);
}
有人可以帮我解决这个问题吗?
我找到了解决方案。根据 Meteor 文档。
Once the Method has finished running on the server, it sends a result message to the client with the Method ID generated in step 2, and the return value itself. The client stores this for later use, but doesn’t call the Method callback yet. If you pass the onResultReceived option to Meteor.apply, that callback is fired.
参考:https://guide.meteor.com/methods.html#advanced-boilerplate
因此,如果您希望一旦服务器方法 return 值被触发,那么您可以使用带有选项 onResultReceived 的 Metor.apply 方法。
Meteor.apply(
"methodName",
[...params],
{
onResultReceived: function() {
// Whatever you want to do after callback.
}
}
我遇到 Meteor.call() 的性能问题。我在服务器端有一个方法可以在一毫秒内执行,但是当我在客户端寻求响应时,需要很长时间才能在回调函数中获取响应数据。有人以前遇到过这个问题吗?
我之前用的是Meteor 1.12.1,后来更新到Meteor 2.1.1,希望通过更新来解决问题,但是没发现有什么不同。
更新:我在所有环境中都遇到了问题(osx、linux、windows)。
例如:这是我的服务器代码
Meteor.methods({
newEntry() {
//This method is executed within millisecond
}
})
这是我的客户端代码
function submitEntry(data) {
Meteor.call(
'newEntry',
data,
(error, res) => {
//Here I am getting the response after long wait.
},
);
}
有人可以帮我解决这个问题吗?
我找到了解决方案。根据 Meteor 文档。
Once the Method has finished running on the server, it sends a result message to the client with the Method ID generated in step 2, and the return value itself. The client stores this for later use, but doesn’t call the Method callback yet. If you pass the onResultReceived option to Meteor.apply, that callback is fired.
参考:https://guide.meteor.com/methods.html#advanced-boilerplate
因此,如果您希望一旦服务器方法 return 值被触发,那么您可以使用带有选项 onResultReceived 的 Metor.apply 方法。
Meteor.apply(
"methodName",
[...params],
{
onResultReceived: function() {
// Whatever you want to do after callback.
}
}