fetch timeout sample Fork

    
      
      
  • /*
     * @title fetch timeout demo
     * @description timeouted fetch w/ AbortController
     * @include http://*
     * @include https://*
     * @license CC0 Univ PD https://creativecommons.org/publicdomain/zero/1.0/
     */
    
    // Chrome/ium 66-
    // https://developer.mozilla.org/en-US/docs/Web/API/AbortController
    // https://developer.mozilla.org/en-US/docs/Web/API/AbortController/AbortController
    // https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
    
    // check in Chromium 66.0.3359.139
    // TODO Firefox did not working?
    (async () => {
        'use strict';
    
        const controller = new AbortController();
        const signal = controller.signal;
    
        const TIMEOUT = 10;
        const timer = setTimeout(() => controller.abort(), TIMEOUT);
        try {
            const response = await fetch(location.href, {signal,});
            const text = await response.text();
            console.log(text);
        } catch (e) {
            console.erroe(e);
        } finally {
            clearTimeout(timer);
        }
        // Promise {<pending>}
        // VM105:8 Uncaught (in promise) DOMException: The user aborted a request.
    })();
    
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。