JSFiddle - React, Tailwind, and code Playground

HTML

<div id="output">

    </div>

JavaScript

var pinger = function () {
        var ping = function (ip, callback) {
            if (!this.inUse) {
                this.status = 'unchecked';
                this.inUse = true;
                this.callback = callback;
                this.ip = ip;
                var _that = this;
                this.img = new Image();
                this.img.onload = function () {
                    _that.inUse = false;
                    _that.callback('responded');
                };
                this.img.onerror = function (e) {
                    if (_that.inUse) {
                        _that.inUse = false;
                        _that.callback('responded', e);
                    }
                    console.log(e);
                };
                this.start = new Date().getTime();
                this.img.src = "http://" + ip + "/?now=" + this.start; // add the current time to work around caching
                this.time = setTimeout(function () {
                    if (_that.inUse) {
                        _that.inUse = false;
                        _that.callback('timeout');
                    }
                }, 1500);
            }
        }
    
        return {
            ping: ping
        };
    }();
    
    (function () {
        var output = document.getElementById('output');
        var servers = [
            'localhost',
            'google.com',
            'okthisreallydoesntmakeanysense',
            'okthisreallydoe',
            'thisisashortone',
            'thisisabitlonger'
        ];
        
        servers.forEach(function (server) {
            new pinger.ping(server, function (status, e) {
                output.innerHTML += server + ': ' + status + '<br />';
            });
        });
    })();