async和await的循環(huán)調(diào)用

問題

在forEach使用 async 和 await時凳兵,期望結(jié)果和實際結(jié)果不一致
期望結(jié)果: 隔一秒打印1次 1, 2, 3, 4 總時長 4s
實際結(jié)果: 一秒之后 1, 2, 3, 4全被打印 總時長 1s

        let array = [1, 2, 3, 4]
        const fun1 = (val) => {
            return new Promise((reslove, reject) => {
                setTimeout(() => {
                    reslove('1')
                    console.log(val)
                }, 1000)
            })
        }
        array.forEach(async function (item) {
            await fun1(item)
        })

原因分析

參考資料
MDN描述:forEach() 期望的是一個同步函數(shù)友瘤,它不會等待 Promise 兌現(xiàn)拆撼。在使用 Promise(或異步函數(shù))作為 forEach 回調(diào)時储矩,請確保你意識到這一點可能帶來的影響剿牺。

// 自己實現(xiàn)一個myForEach方法
Array.prototype.myForEach = function(callBack, thisArg) {
    for(let i = 0; i < this.length; i++) {
      callBack.call(thisArg, this[i], i, this)
    }  
} 

從上面代碼可以看出裳擎,myForEach內(nèi)部執(zhí)行callBack時,沒有await關(guān)鍵字斯碌。

解決:

方案1.使用 for循環(huán)代替forEach

let array = [1, 2, 3, 4]
const fun1 = (val) => {
    return new Promise((reslove, reject) => {
        setTimeout(() => {
            reslove('1')
            console.log(val)
        }, 1000)
    })
}
const fun2 = async () => {
    for (let i = 0; i < array.length; i++) {
        await fun1(array[i])
    }
}
fun2()

項目中例子記錄

  1. 需求:讓DOM元素逐個出現(xiàn)


    Video_2023-10-12_103204.gif
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .divStyle {
          display: inline-block;
          margin: 10px;
          width: 100px;
          height: 100px;
          scale: 0;
          transition: all .5s ease-in-out;
          background: grey;
          border: 5px;   
        }
    </style>
</head>

<body>
    <script>
        function createDiv() {
            const divEl = document.createElement('div')
            divEl.classList.add('divStyle')
            setTimeout(() => {
                divEl.style.scale = 1
            }, 50)
            document.body.appendChild(divEl)
        }

        const addDivFun = async () => {
            for (let i = 0; i < 10; i++) {
              const fun = () => {
                return new Promise((reslove) => {
                  setTimeout(() => {
                    createDiv()
                    reslove()
                  }, 1000)  
                })
              }
              await fun()
            }
        }
        addDivFun()
    </script>
</body>

</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末一死,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子傻唾,更是在濱河造成了極大的恐慌投慈,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伪煤,居然都是意外死亡加袋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門带族,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锁荔,“玉大人蟀给,你說我怎么就攤上這事蝙砌。” “怎么了跋理?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵择克,是天一觀的道長。 經(jīng)常有香客問我前普,道長肚邢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任拭卿,我火速辦了婚禮骡湖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峻厚。我一直安慰自己响蕴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布惠桃。 她就那樣靜靜地躺著浦夷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辜王。 梳的紋絲不亂的頭發(fā)上劈狐,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音呐馆,去河邊找鬼肥缔。 笑死,一個胖子當(dāng)著我的面吹牛汹来,可吹牛的內(nèi)容都是我干的辫继。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼俗慈,長吁一口氣:“原來是場噩夢啊……” “哼姑宽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闺阱,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤炮车,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘦穆,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡纪隙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扛或。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绵咱。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖熙兔,靈堂內(nèi)的尸體忽然破棺而出悲伶,到底是詐尸還是另有隱情,我是刑警寧澤住涉,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布麸锉,位于F島的核電站,受9級特大地震影響舆声,放射性物質(zhì)發(fā)生泄漏花沉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一媳握、第九天 我趴在偏房一處隱蔽的房頂上張望碱屁。 院中可真熱鬧,春花似錦蛾找、人聲如沸娩脾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晦雨。三九已至,卻和暖如春隘冲,著一層夾襖步出監(jiān)牢的瞬間闹瞧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工展辞, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留奥邮,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓罗珍,卻偏偏與公主長得像洽腺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子覆旱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容