要求タイムアウト付きfetchプラグイン

1157 ワード

プロジェクトで使用するfetchプラグインにはタイムアウトを要求する属性が設定されていません.一部のシーンでタイムアウトを要求するためのアラームが必要です.fetchを考慮してタイムアウトを要求するプラグインを作成します.
自分のfetchはプロミスによって開発されたもので、プロミスの中のraceを使ってsettimeoutと配合してこの需要を実現することを考えています.以下にプラグインコードを貼ります.
(function (self) {
    "use strict";

    //       
    var options={
        timeout:20000
    };

    self.sqfetch=function(url,init,opts){
        if(opts) {
            for (var key in opts) {
                options[key] = opts[key];
            }
        }
        var fetchPromise=fetch(url, init);
        var timeoutPromise=new Promise(function(resolve, reject){
            setTimeout(function(){
                reject("timeout");
            },options.timeout);
        });
        return Promise.race([fetchPromise, timeoutPromise]);
    };
})(typeof self !== 'undefined' ? self : this);
使う時はそのままsqfetchを使ってもいいです.optsはfetchに関する要求パラメータです.timeoutはカスタムのoptionsです.
sqfetch(url,{headers:{'Authorization':token},method:'get'},{timeout:5000}).then(function(res) {
    ...
}).catch(function () {
    ...
})
 
転送ゲート:
1.Promise文書:Promise-JavaScript_MDN