为了账号安全,请及时绑定邮箱和手机立即绑定

如何在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 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信