第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

回調(diào)函數(shù)運(yùn)行的順序

回調(diào)函數(shù)運(yùn)行的順序

qq_笑_17 2019-02-26 14:51:01
代碼如下,data是長度為3的一個數(shù)組,cmt是個object請問為什么輸出結(jié)果是removed campgroundsremoved commentsAdded a campgroundAdded a campgroundAdded a campgroundCreated new commentCreated new commentCreated new comment而不是removed campgroundsremoved commentsAdded a campgroundCreated new commentAdded a campgroundCreated new commentAdded a campgroundCreated new comment如果想讓結(jié)果變成第二種情況,應(yīng)該如何修改以上代碼?應(yīng)該如何修改以上代碼?
查看完整描述

2 回答

?
jeck貓

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個贊

因?yàn)榛卣{(diào)函數(shù)的特點(diǎn)就是無需等待,且回調(diào)執(zhí)行的時間也不確定。你這里出現(xiàn)這種輸出順序的原因是執(zhí)行addComments時花了些時間。


如果你想要按Added a campground、Created new comment這樣交替打印的話,就需要等待前一個 comment完成再執(zhí)行下一個capmgroup的添加了。這就放棄了js異步的優(yōu)勢。現(xiàn)在data數(shù)據(jù)只有三個不算多,但是數(shù)據(jù)一多就會影響體驗(yàn),用戶會看到最后面的comment添加的比第一個遲的多。


代碼的話可以用Promise:


function addComments(campground, cmt,resolve) {

  Comment.create(cmt, function(err, comment) {

    if (err) console.log(err);

    else {

      campground.comments.push(comment);

      campground.save();

      console.log("Created new comment");

      resolve();

    }

  });

}


function new_addCamps(seed) {

  return new Promise((resolve, reject) => {

    Camp.create(seed, function(err, campground) {

      if (err) reject(err);

      else {

        console.log("Added a campground");

        addComments(campground, cmt,resolve);

      }

    });

  });

}

同時不能再使用forEach而是使用for循環(huán):


(async function (){

for(let i=0;i<data.length;i++){

await addCamps(data[i]);

}

})();


查看完整回答
反對 回復(fù) 2019-03-08
?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊

樓上正解,舉個簡單的例子

for (var i=0;i<3;i++){


setTimeout(function(){console.log(i)},100)

}

你覺得輸出結(jié)果是什么?


答案是三個3

異步回調(diào),普通的回調(diào)是沒問題的,就是把setTimeout去掉,變成一個閉包函數(shù)。

輸出是0,1,2

但是異步回調(diào)會讓事件輪詢的順序產(chǎn)生變化。


特別詳細(xì)的去百度一下Js的事件輪詢機(jī)制吧


查看完整回答
反對 回復(fù) 2019-03-08
  • 2 回答
  • 0 關(guān)注
  • 1781 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號