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

資訊專欄INFORMATION COLUMN

Promise面試題,控制異步流程

boredream / 1098人閱讀

摘要:有這樣一道關(guān)于的面試題,描述如下頁面上有一個輸入框,兩個按鈕,按鈕和按鈕,點擊或者分別會發(fā)送一個異步請求,請求完成后,結(jié)果會顯示在輸入框中。大家有其他方法或者問題可以留言,或者直接發(fā)送消息。

有這樣一道關(guān)于promise的面試題,描述如下:

頁面上有一個輸入框,兩個按鈕,A按鈕和B按鈕,點擊A或者B分別會發(fā)送一個異步請求,請求完成后,結(jié)果會顯示在輸入框中。

題目要求,用戶隨機點擊A和B多次,要求輸入框顯示結(jié)果時,按照用戶點擊的順序顯示,舉例:

用戶點擊了一次A,然后點擊一次B,又點擊一次A,輸入框顯示結(jié)果的順序為先顯示A異步請求結(jié)果,再次顯示B的請求結(jié)果,最后再次顯示A的請求結(jié)果。

UI界面如圖:

這個需求該如何用promise來實現(xiàn)呢?代碼如下:

    //dom元素
    var a = document.querySelector("#a")
    var b = document.querySelector("#b")
    var i = document.querySelector("#ipt");
    //全局變量p保存promie實例
    var P = Promise.resolve();
    a.onclick  = function(){
        //將事件過程包裝成一個promise并通過then鏈連接到
        //全局的Promise實例上,并更新全局變量,這樣其他點擊
        //就可以拿到最新的Promies執(zhí)行鏈
        P = P.then(function(){
            //then鏈里面的函數(shù)返回一個新的promise實例
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve()
                    i.value = "a";
                },1000)
            })
        })
    }
    b.onclick  = function(){
        P = P.then(function(){
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve()
                    console.log("b")
                    i.value = "b"
                },2000)
            })
        })
    }

我們用定時器來模擬異步請求,仔細于閱讀代碼我們發(fā)現(xiàn),在全局我們定義了一個全局P,P保存了一個promise的實例。

然后再觀察點擊事件的代碼,用戶每次點擊按鈕時,我們在事件中訪問全局Promise實例,將異步操作包裝到成新的Promise實例,然后通過全局Promise實例的then方法來連接這些行為。

連接的時候需要注意,then鏈的函數(shù)中必須將新的promise實例進行返回,不然就會執(zhí)行順序就不正確了。

需要注意的是,then鏈連接完成后,我們需要更新全局的P變量,只有這樣,其它點擊事件才能得到最新的Promise的執(zhí)行鏈。

這樣每次用戶點擊按鈕就不需要關(guān)心回調(diào)執(zhí)行時機了,因為promise的then鏈會按照其連接順序依次執(zhí)行。

這樣就能保證用戶的點擊順序和promise的執(zhí)行順序一致了。

大家有其他方法或者問題可以留言,或者直接發(fā)送消息。

歡迎關(guān)注、轉(zhuǎn)發(fā)、點擊好看

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

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

相關(guān)文章

  • Promise面試2實現(xiàn)異步串行執(zhí)行

    摘要:按照要求實現(xiàn)函數(shù),把傳進去的函數(shù)數(shù)組按順序先后執(zhí)行,并且把返回的數(shù)據(jù)先后放到數(shù)組中。例子中我們是按順序執(zhí)行的,但是輸出的結(jié)果卻是,對于這些異步函數(shù)來說,并不會按順序執(zhí)行完一個,再執(zhí)行后一個。 按照要求:實現(xiàn) mergePromise 函數(shù),把傳進去的函數(shù)數(shù)組按順序先后執(zhí)行,并且把返回的數(shù)據(jù)先后放到數(shù)組 data 中。 代碼如下:const timeout = ms => new Pro...

    cikenerd 評論0 收藏0
  • 高級前端面試大匯總(只有試,沒有答案)

    摘要:面試題來源于網(wǎng)絡(luò),看一下高級前端的面試題,可以知道自己和高級前端的差距。 面試題來源于網(wǎng)絡(luò),看一下高級前端的面試題,可以知道自己和高級前端的差距。有些面試題會重復(fù)。 使用過的koa2中間件 koa-body原理 介紹自己寫過的中間件 有沒有涉及到Cluster 介紹pm2 master掛了的話pm2怎么處理 如何和MySQL進行通信 React聲明周期及自己的理解 如何...

    kviccn 評論0 收藏0
  • 2018大廠高級前端面試匯總

    摘要:面試的公司分別是阿里網(wǎng)易滴滴今日頭條有贊挖財滬江餓了么攜程喜馬拉雅兌吧微醫(yī)寺庫寶寶樹海康威視蘑菇街酷家樂百分點和海風(fēng)教育。 (關(guān)注福利,關(guān)注本公眾號回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實戰(zhàn)、面試指導(dǎo)) 本人于7-8月開始準(zhǔn)備面試,過五關(guān)斬六將,最終抱得網(wǎng)易歸,深深感受到高級前端面試的套路。以下是自己整理的面試題匯總,不敢藏私,統(tǒng)統(tǒng)貢獻出來。 面試的公司分...

    zzir 評論0 收藏0

發(fā)表評論

0條評論

boredream

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<