gpt4 book ai didi

meteor - 服务器连接关闭时如何检查 Meteor.call() 是否失败?

转载 作者:行者123 更新时间:2023-12-04 14:28:28 26 4
gpt4 key购买 nike

当 Meteor 服务器连接丢失时,如何验证 Meteor.call() 失败? Meteor.call() 不返回任何值。当您的应用程序运行时,基本上在 Meteor shell 中按 Ctrl+Z,然后在应用程序中执行一些触发 Meteor.call 的操作,即添加新的博客文章:

Meteor.call('createPhrase', phrase, function(error) {
console.log("This NEVER gets called if server is down.");

if (error) {
throwError(error.reason);
}
});

我尝试使用 session 变量,但 react 性搞砸了,即下面的代码将在我的模板处理程序中触发错误(快速闪到浏览器中)并且一旦 isMyError 设置为 true,然后当 Meteor.call成功后错误消失了,按照 isMyError = false,但这看起来真的很草率。
Session.set("isMyError", true);

Meteor.call('createPhrase', phrase, function(error) {
console.log("This NEVER gets called if server is down.");

Session.set("isMyError", false);

if (error) {
throwError(error.reason);
}
});


Template.index.isMeteorStatus = function () {

myClientStatus = Meteor.status();

if ( (myClientStatus.connected === false) || (Session.get("isMyError") === true) ) {
return false;
} else {
return true;
}
};

最佳答案

Meteor 的调用通常进入一个队列,按调用顺序发送到服务器。如果没有连接,它们会留在队列中,直到再次连接服务器。

这就是什么都没有返回的原因,因为 Meteor 希望它可以重新连接然后发送调用,当它这样做时,它最终会返回一个结果。

如果您想在调用时验证服务器是否已连接,最好检查 Meteor.status().connected (这是 react 性的)并且只运行 Meteor.call如果是否则抛出错误

if(Meteor.status().connected)
Meteor.call(....
else throwError("Error - not connected");

您也可以使用 navigator.onLine以检查网络是否已连接。

使用 Meteor.status().connected 会遇到 60 秒延迟的原因关于 meteor 是否已连接的真实状态,浏览器并没有真正的方法来检查其是否已连接。

Meteor 会定期发送心跳,即 websocket/长轮询线上的“h”以检查它是否已连接。一旦它意识到它在另一端没有得到心跳,它就会标记连接断开。

但是,如果 Meteor.call,它也会将其标记为断开连接。或者某些数据通过并且套接字无法发送任何数据。如果您使用 Meteor.call提前到 Meteor.status().connected它会更快地意识到它已断开连接。我不确定它会立即意识到您可以一行一行地使用它们,但是您可以使用 Meteor.setTimeout一两秒后触发调用。

尝试成功:

Meteor 的设计非常好,可以尝试成功。与其“尝试失败”并出现错误说明网络不可用,不如尝试将所有内容排队,直到连接恢复为止。

最好的办法是避免告诉用户网络已关闭,因为通常他们会知道这一点。排队的任务确保一旦连接恢复,用户流将保持不变。

因此,最好使用重新连接过程中内置的队列,而不是避免它们。

关于meteor - 服务器连接关闭时如何检查 Meteor.call() 是否失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20926790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com