簡體   English   中英

如何在 promise.then 內部中斷?

[英]How to break while inside promise.then?

在檢查 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
            });

        }

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

javascript中沒有thread.sleep; 如果要在異步操作運行時暫停執行,則需要將代碼的 rest 排隊,以便在 promise 分辨率之后運行。

如果您查看 promise 規范,從 then 回調返回 promise 將延長原始 promise 的等待。

let p = getReposData(name, page_id).then(data => {
  if (data.length === 0){
    return;
  }
  return Promise.all(data.map(item=> createReposLink(item, parent_el)))
})

我肯定會達到異步/等待,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM