国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通過koa2和Promise.race()構(gòu)造一個(gè)超時(shí)取消的ajax。

e10101 / 3054人閱讀

摘要:上說你可以使用構(gòu)造函數(shù)創(chuàng)建一個(gè)新的對(duì)象。使用對(duì)象完成與請(qǐng)求的通信。服務(wù)端使用重要的點(diǎn)在于不能直接使用這樣返回給前端會(huì)直接報(bào)錯(cuò)。前端的代碼要注意的第三個(gè)參數(shù)設(shè)置成將請(qǐng)求設(shè)置為異步,然后由于超時(shí)會(huì)取消請(qǐng)求,所以這里根本不需要來顯式的取消請(qǐng)求

MDN上說:

你可以使用AbortController.AbortController()構(gòu)造函數(shù)創(chuàng)建一個(gè)新的AbortController對(duì)象。 使用AbortSignal 對(duì)象完成與DOM請(qǐng)求的通信。

對(duì)于瀏覽器的兼容性有很高的要求,chrome在66版本以上, firefox在57以上,由于遇到了這樣的需求,所以用傳統(tǒng)的XHR實(shí)現(xiàn)了一下這個(gè)功能。

服務(wù)端使用koa2:

/**
 * @vividw
 * 2019.1.10
 */
const Koa = require("koa");
const app = new Koa();
const Router = require("koa-router");
const router = new Router();
const { resolve } = require("path");
const koaStatic = require("koa-static");
const cors = require("@koa/cors");

const sleep = (count) => new Promise(resolve => {
    setTimeout(resolve, count);
});

// router.get("/", async (ctx, next) => {
//     ctx.body = "Hello,Wolrd!";
//
//     await next();
// });

router.get("/data", async (ctx, next) => {
    await sleep(3000);
    ctx.body = {
        data: "12345"
    }

    await next();
});

app
    .use(cors())
    .use(koaStatic(resolve(__dirname + "/")))
    .use(router.routes())
    .use(router.allowedMethods());

app.listen(3000, () => {
    console.log("App running!");
});

重要的點(diǎn)在于不能直接使用setTimeout(ctx.body = "12345" ,3000);這樣返回給前端會(huì)直接報(bào)錯(cuò)。

前端的代碼:

 const ownFetch = (count) => new Promise((resolve,reject) => {
            const xhr = new XMLHttpRequest();

            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    if(xhr.status == 200){
                        resolve(xhr);
                    }
                 }
            }
            xhr.timeout = count;
            xhr.open("get", "http://localhost:3000/data", true);
            xhr.send();
        })
        window.onload = () => {
            const timeout = (count) => new Promise((resolve, reject) => {
                setTimeout(() => {
                    reject("failed");
                }, count);
            });
            (async () => {
                ownFetch(2000);
            })();
        }

要注意xhr.open()的第三個(gè)參數(shù)設(shè)置成true將AJAX請(qǐng)求設(shè)置為異步,然后由于超時(shí)會(huì)取消請(qǐng)求,所以這里根本不需要xhr.abort()來顯式的取消請(qǐng)求

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/100931.html

相關(guān)文章

  • javascript異步之Promise.all()、Promise.race()、Promise.

    摘要:的執(zhí)行與狀態(tài)無關(guān)當(dāng)?shù)玫綘顟B(tài)不論成功或失敗后就會(huì)執(zhí)行,原文鏈接參考鏈接對(duì)象 同期異步系列文章推薦談一談javascript異步j(luò)avascript異步中的回調(diào)javascript異步與promisejavascript異步之Promise.resolve()、Promise.reject()javascript異步之Promise then和catchjavascript異步之a(chǎn)sync...

    clasnake 評(píng)論0 收藏0
  • es6:常用命令(2)

    摘要:本身是一個(gè)構(gòu)造函數(shù),用來生成數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)具有的屬性構(gòu)造函數(shù),默認(rèn)是函數(shù)。舉例鏈?zhǔn)絼h除某個(gè)鍵清空對(duì)象是一個(gè)構(gòu)造函數(shù),用來生成實(shí)例,是異步編程的一種解決方案。構(gòu)造函數(shù)接受一個(gè)函數(shù)作為參數(shù),該函數(shù)的兩個(gè)參數(shù)分別是函數(shù)和。 1、 Set 和 Map數(shù)據(jù)結(jié)構(gòu) Set 數(shù)據(jù)結(jié)構(gòu) Set 類似數(shù)組,但是成員是唯一的,不存在重復(fù)值。 Set本身是一個(gè)構(gòu)造函數(shù),用來生成Set數(shù)據(jù)結(jié)構(gòu)。 Set...

    wua_wua2012 評(píng)論0 收藏0
  • Promise使用細(xì)節(jié)

    摘要:應(yīng)用把一個(gè)異步操作和定時(shí)器放在一起。如果定時(shí)器先觸發(fā)就提示用戶超時(shí)用戶超時(shí)什么是值穿透或者期望傳入一個(gè)函數(shù)如果不是函數(shù)會(huì)發(fā)生值穿透和的第二個(gè)參數(shù)的區(qū)別比較類似是一個(gè)語法糖相當(dāng)于還有一點(diǎn)區(qū)別就是如果第一個(gè)報(bào)錯(cuò)第二個(gè)無法捕獲。 Promise使用細(xì)節(jié) 使用promise需要注意的幾點(diǎn): 1.如何用promise實(shí)現(xiàn)并行的異步 (Promise.all配合.map) Promise.all...

    fnngj 評(píng)論0 收藏0
  • 通過回調(diào)來理解Promise

    摘要:可信任性確定性在解決上述的回調(diào)函數(shù)的問題之前,有必要先來認(rèn)識(shí)一下的一些主要方法的起點(diǎn)執(zhí)行結(jié)果依次是,,,代碼解讀以上代碼體現(xiàn)了的如下特性一旦決議調(diào)用過一次或者就不再重復(fù)調(diào)用決議回調(diào)或者改變決議回調(diào)。 通過回調(diào)來理解Promise 我們都知道Promise的出現(xiàn)是為了規(guī)避回調(diào)地獄的,由此,我們先來深入了解一下回調(diào)的缺陷: 回調(diào) 1、缺乏信任 2、不確定性 Example var mo...

    DevYK 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<