使用无限循环来不断检查与服务器的连接是否可以?

Is it okay to use an infinite loop to constantly check the Connection to a Server?

我今天正在编写我的第一个 Angular 应用程序。现在我想检查与服务器的连接。如果它处于离线状态,则会出现一个屏幕,上面写着类似“你离线,但你需要连接”之类的内容。我有一个 JavaScript 函数,它做得很好。但是现在,我只能在单击特定按钮时检查我的连接状态。但是我想经常检查连接,所以如果连接关闭,屏幕会立即出现。

我从两年前开始编程,过去我经常听到“不要使用无限循环”或“永远不要使用无限循环”等句子。

我的问题是,在这种情况下可以使用无限循环吗?或者有其他解决方法吗?

我的代码非常简单:

var isOnline;
function testIfOnline() {
    if(navigator.onLine) {

        if (!isOnline) {
            hideConnectionView();
        }

        isOnline = true;
    } else {
        if (isOnline) {
            console.log("Die Verbindung zum Server wurde unterbrochen!");
        } else {
            console.log("Es konnte keine Verbindung zum Server aufgebaut werden!");
        }

        isOnline = false;

        //Restlicher Code:

        showConnectionView();

    }
}
  1. 问题: 是否有特定规则规定何时允许使用无限循环或其他内容?

不行 :D 在这种情况下,无休止地调用一个函数是不必要的,因为有事件,所以太过分了。

考虑一下:

import {fromEvent, merge} from 'rxjs'

merge(
   fromEvent(window, 'online'),
   fromEvent(window, 'offline'),
).subscribe(
  () => {
    const condition = navigator.onLine ? "online" : "offline";
    console.log(condition);
  }
)

编辑:为了解决拔掉机器时这不起作用的事实,我们可以像这样扩展它:

import { interval, merge, fromEvent } from 'rxjs'; 
import { mapTo } from 'rxjs/operators';


merge(
  fromEvent(window, 'online'),
  fromEvent(window, 'offline'),
  interval(1000),
).pipe(
  mapTo(navigator.onLine),
).subscribe(
  online => { 
    const condition = navigator.onLine ? "online" : "offline";
    console.log(condition);
  }
)

Demo

您可以使用 nodemon 持续 运行 您的服务器 nodemon