如何在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

            });


        }


翻过高山走不出你
浏览 126回答 2
2回答

红糖糍粑

我肯定会使用 async/await,如下所示:let my_break = 0let page_id = 1while (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

守候你守候我

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)))})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript