亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何在promise.then中打破?

如何在promise.then中打破?

翻過高山走不出你 2021-12-02 15:12:47
在 Promise.then 中檢查我的數據后,我想退出循環。我該怎么做?現在我有無限循環。這是代碼:    let my_break = 0    let page_id = 1    let p = Promise.resolve()        while(my_break===0) {            p = p.then(() => {                 getReposData(name,page_id).then(data=>{                    if (data.length===0){                        my_break = 1                    }                   else {                    data.forEach(item=>{createReposLink(item,parent_el)})                   }                })                page_id += 1            });        }
查看完整描述

2 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

我肯定會使用 async/await,如下所示:


let my_break = 0

let page_id = 1

while (my_break===0) {

    const data = await getReposData(name, page_id)

    if (data.length===0){

        my_break = 1

    } else {

        data.forEach(item=>{createReposLink(item,parent_el)})

    }

    page_id += 1

}


您可以在此處找到有關 async/await 的更多信息:https : //developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await


查看完整回答
反對 回復 2021-12-02
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

Promise 本質上是異步的,這意味著執行 then 回調的最早點將是下一個事件 tick。您的 while 循環正在當前事件滴答上執行,并且在完成之前不會放棄執行控制。它只會在 promise 解決時完成,這只能在下一個事件滴答時發生,在循環完成之前不會發生;這是從來沒有。


javascript 中沒有 thread.sleep;如果要在異步操作運行時暫停執行,則需要將其余代碼排隊以在 Promise 解析后運行。


如果您查看承諾規范,則從 then 回調返回承諾將延長原始承諾的等待時間。


let p = getReposData(name, page_id).then(data => {

  if (data.length === 0){

    return;

  }

  return Promise.all(data.map(item=> createReposLink(item, parent_el)))

})


查看完整回答
反對 回復 2021-12-02
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號