成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Promise-大白話之[按需學(xué)習(xí)]

spacewander / 2976人閱讀

摘要:但是一直一拖再拖。目前在做的是構(gòu)建自己的代理池。那么我還需要利用這條代理信息去訪問百度或者其他網(wǎng)站驗(yàn)證這個(gè)代理是否可用,可用則代理信息入庫(kù),否則丟掉。得到則代表所有的請(qǐng)求都已完成。上說對(duì)象用于一個(gè)異步操作的最終完成或失敗及其結(jié)果值的表示。

背景

之前就有在GitHub上吹過一個(gè)牛:https://github.com/eternitysp... 打算做一個(gè)爬蟲,爬點(diǎn)東西。但是一直一拖再拖。最近離職在找工作。時(shí)間大把。這就開始折騰起來了。目前在做的是構(gòu)建自己的代理池。
簡(jiǎn)單來說,我需要去訪問提供免費(fèi)代理的網(wǎng)站,然后把這些免費(fèi)的代理信息驗(yàn)證后入庫(kù)。
假設(shè)我現(xiàn)在訪問A頁(yè)面,里邊有m條代理數(shù)據(jù)。那么我還需要利用這m條代理信息去訪問百度或者其他網(wǎng)站驗(yàn)證這個(gè)代理是否可用,可用則代理信息入庫(kù),否則丟掉。但是利用代理去訪問百度是個(gè)異步的過程。我在什么時(shí)候知道這m條請(qǐng)求都完成了呢?
我想到的一種方法:定義m個(gè)變量初始值設(shè)置為0,異步請(qǐng)求成功后吧變量賦值為1,然后每個(gè)請(qǐng)求完成計(jì)算一下這m個(gè)變量的乘積。得到1則代表所有的請(qǐng)求都已完成??墒沁@種方法是不是麻煩了點(diǎn)。早就聽聞promise是es6的新花樣,可以解決這種多重回調(diào)的問題。于是就上MDN上文檔擼起來。

Promise

MDN上說:Promise 對(duì)象用于一個(gè)異步操作的最終完成(或失?。┘捌浣Y(jié)果值的表示。(簡(jiǎn)單點(diǎn)說就是處理異步請(qǐng)求。我們經(jīng)常會(huì)做些承諾,如果我贏了你就嫁給我,如果輸了我就嫁給你之類的諾言。這就是promise的中文含義:諾言,一個(gè)成功,一個(gè)失敗。)
呵呵,文縐縐的。還是上代碼:

// Promise 接受兩個(gè)參數(shù)
// resolve: 異步事件成功時(shí)調(diào)用(表白成功)
// reject: 異步事件失敗時(shí)調(diào)用(表白失敗)
var Tom = new Promise((resolve, reject) => {
    // 獲取表白結(jié)果
    if (表白().result === "表白成功") {
        // 反饋
        resolve(表白().girlName)
    }
    else {
        reject("小伙伴們,我 Tom 表白被拒了")
    }
})
// 隨機(jī)一個(gè)隨機(jī)表白方法,返回表白結(jié)果和表白對(duì)象
function 表白() {
    return {
        girlName:Math.random() > 0.5 ? "小紅" : "花花",
        result:Math.random() > 0.5 ? "表白成功" : "表白被拒"
    }
}
// 表白完畢和小伙伴們分享表白結(jié)果
Tom.then(res=> console.log("小伙伴們,我表白"+ res +"成功了") )  // 分享表白成功
   .catch(res=> console.log(res) )                            // 分享表白失敗
// 聽Tom說打算表白,Jim也要表白
var Jim = new Promise((resolve, reject) => {
    // 獲取表白結(jié)果
    if (表白().result === "表白成功") {
        // 反饋
        resolve(表白().girlName)
    }
    else {
        reject("小伙伴們,我 Jim 表白被拒了")
    }
})
Jim.then(res=> console.log("小伙伴們,我表白"+ res +"成功了") )  // 分享表白成功
   .catch(res=> console.log(res) )                            // 分享表白失敗
// 那么問題來了,我們?cè)趺粗?Tom 還 Jim 都表白成功了,然后開一個(gè)party慶祝一下呢
Promise.all([Tom,Jim])
       .then(res=> console.log(res))      // [Tom表白對(duì)象,Jim表白對(duì)象]
       .catch(res=> console.log(res));    // 第一個(gè)表白失敗的對(duì)象

看到這里是不是大概已經(jīng)知道promise是個(gè)什么玩意了。
接著在我們的爬蟲項(xiàng)目里邊應(yīng)用了:

var proxyList= [{},{},{},{},{}];  // 一個(gè)空對(duì)象代表一個(gè)代理信息
var promiseList = [];
for(let i = 1;i{
    // 這里我們利用setTimeout來模擬異步請(qǐng)求驗(yàn)證proxy的可用性
    setTimeout(()=>{
        Math.random() > 0.001 ? resolve() : reject()
    })
  });
  promiseList.push(promiseItem);
}
Promise.all(promiseList).then(res=> console.log("驗(yàn)證完畢,可以下一頁(yè)了"))

到此,promise的實(shí)際應(yīng)用就算告一段落了。

總結(jié)

感覺又多了一個(gè)裝逼的姿勢(shì)了。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89734.html

相關(guān)文章

  • 【Vue原理】NextTick - 源碼版 宏微任務(wù)的抉擇

    摘要:這么講,有點(diǎn)籠統(tǒng),準(zhǔn)確地說,應(yīng)該是事件回調(diào)執(zhí)行過程中,在主線程為空之后,異步代碼執(zhí)行之前,所有通過注冊(cè)的異步代碼都是用宏任務(wù)。 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于 Vue版本 【2.5.17】 如果你覺得排版難看,請(qǐng)點(diǎn)擊 下面鏈接 或者 拉到 下面關(guān)注公眾號(hào)也可以吧 【...

    raise_yang 評(píng)論0 收藏0
  • JS筆記

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • JavaScript 異步

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個(gè)符合規(guī)范并可配合使用的寫一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過...

    tuniutech 評(píng)論0 收藏0
  • 【Vue原理】NextTick - 源碼版 獨(dú)立自身

    摘要:盡量把所有異步代碼放在一個(gè)宏微任務(wù)中,減少消耗加快異步代碼的執(zhí)行。我們知道,如果一個(gè)異步代碼就注冊(cè)一個(gè)宏微任務(wù)的話,那么執(zhí)行完全部異步代碼肯定慢很多避免頻繁地更新。中就算我們一次性修改多次數(shù)據(jù),頁(yè)面還是只會(huì)更新一次。 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于 Vue版本 【2.5...

    劉東 評(píng)論0 收藏0
  • 前端面經(jīng)整理JS和CSS

    摘要:作為對(duì)象原型鏈的終點(diǎn)。調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于。它可以用于引用該函數(shù)的函數(shù)體內(nèi)當(dāng)前正在執(zhí)行的函數(shù)。 一 JS 二 CSS 一 JS ==和===的區(qū)別 ===叫做嚴(yán)格運(yùn)算符 ==叫做相等運(yùn)算符嚴(yán)格運(yùn)算符比較時(shí)不僅僅比較數(shù)值還要比較數(shù)據(jù)類型是否一樣相等運(yùn)算符在比較相同類型的數(shù)據(jù)時(shí),與嚴(yán)格相等運(yùn)算符完全一樣。 在比較不同類型的數(shù)據(jù)時(shí),相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,...

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

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

0條評(píng)論

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