Načítání JavaScriptu s časovým limitem

Rozhraní API pro načítání začalo jako cíl kritiky kvůli nedostatku časového limitu a zrušení požadavku. I když lze tyto kritiky tvrdit, že jsou spravedlivé nebo ne, nemůžete popřít, že API pro načítání bylo docela úžasné. Jak jsme vždy dělali, pokud nějaká funkce chybí, vždy ji můžeme doplnit.

Nedávno jsem přemýšlel o shimmingu v časovém limitu načítání a našel jsem zde dobrý skript pro načítání / časový limit. Mírně jsem to upravil, aby se zabránilo fetch hovoru then a catch zpětná volání z provádění jejich úkolů, protože se domnívám, že časový limit by měl být řešen podle příslibu shim:

const FETCH_TIMEOUT = 5000;
let didTimeOut = false;

new Promise(function(resolve, reject) {
    const timeout = setTimeout(function() {
        didTimeOut = true;
        reject(new Error('Request timed out'));
    }, FETCH_TIMEOUT);
    
    fetch('https://davidwalsh.name/?xx1')
    .then(function(response) {
        // Clear the timeout as cleanup
        clearTimeout(timeout);
        if(!didTimeOut) {
            console.log('fetch good! ', response);
            resolve(response);
        }
    })
    .catch(function(err) {
        console.log('fetch failed! ', err);
        
        // Rejection already happened with setTimeout
        if(didTimeOut) return;
        // Reject with error
        reject(err);
    });
})
.then(function() {
    // Request success and no timeout
    console.log('good promise, no timeout! ');
})
.catch(function(err) {
    // Error: response error, request timeout or runtime error
    console.log('promise error! ', err);
});

Zabalení tohoto kódu do funkce nazvané fetchWithTimeout , čímž překročíte časový limit a načtení URL/nastavení by fungovalo dobře; protože lidé rádi používají načítání různými způsoby, rozhodl jsem se nevytvářet zobecněnou funkci a místo toho poskytujem pouze základní logiku.

Mnozí by tvrdili, že časový limit by měl pocházet ze serveru, ale všichni víme, že vývojáři na front-endu nemají vždy kontrolu nad oběma stranami požadavku. Pokud hledáte fragment časového limitu žádosti o načtení, tady to máte!