fetch timeout sample

  • /*
     * @title fetch timeout sample
     * @description fetch w/ request timeout by AbortController
     * @include http://*
     * @include https://*
     * @license CC0 Univ PD https://creativecommons.org/publicdomain/zero/1.0/
     */
    
    // Chrome/ium v66+ implemented AbortController
    // 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
    
    // Chromium | 66.0.3359.139       | 66.0.3359.139-0ubuntu0.16.04.3
    // Firefox  | 60.0 20180509235617 | 60.0+build2-0ubuntu0.16.04.1
    (async () => {
        'use strict';
    
        const controller = new AbortController();
        const signal = controller.signal;
        signal.onabort = () => {
            console.error('aborted?', signal.aborted);
        };
    
        const TIMEOUT_MSEC = 1;
        const timer = setTimeout(() => controller.abort(), TIMEOUT_MSEC);
        try {
            const response = await fetch(location.href, { signal, });
            const text = await response.text();
            console.log(text);
        } catch (e) {
            console.error(e);
        } finally {
            clearTimeout(timer);
        }
        // Promise {<pending>}
        // aborted? true
        // DOMException: The user aborted a request.
    })();
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2018/05/11 14:10:43 - 2018-05-11
  2. 2018/05/11 08:33:11 - 2018-05-11
  3. 2018/05/11 08:26:10 - 2018-05-11