js中for循环多次执行,退出之前循环问题

function aa () {
    (async () => {
      for (let i = 0; i < 10; i++) {
        console.log(i, 'iiiii')
        await new Promise((resolve1, reject1) => {
          (async () => {
            for (let j = 0; j < 20; j++) {
              await new Promise((resolve, reject) => {
                setTimeout(() => {
                  resolve()
                }, 5000)
              })
              console.log(i, j)
            }
            resolve1()
          })(this)
        })
      }
    })(this)
}

先执行aa()等五秒后再执行aa()

上面的两个循环在点击的时候会执行,如果我点了5次,那么for除了执行最后点击一次循环,前面的4次如果没有完成,还是会执行。请问怎么跳过之前的循环不执行,直接执行最后一次?

阅读 2.6k
2 个回答
var tmp = []
function aa (num) {
    (async () => {
      for (let i = 0; i < 10; i++) {
        if (exist(num)) {
          break
        }
        console.log(num, 'ourter')
        await new Promise((resolve1, reject1) => {
          (async () => {
            for (let j = 0; j < 20; j++) {
              if (exist(num)) {
                  break
              }
              console.log(num, 'inner')
              await new Promise((resolve, reject) => {
                setTimeout(() => {
                  if (!exist(num)) {
                    resolve()
                  }
                }, 5000)
              })
              console.log(i, j)
            }
            resolve1()
          })(this)
        })
      }
    })(this)
}
function exist (num) {
  if (num != tmp[tmp.length - 1]){
    return true
  }
  return false
}
tmp.push((tmp.length))
aa(tmp[tmp.length - 1])
  async function fn() {
      for (let i = 0; i < 10; i++) {
      for (let j = 0; j < 10; j++) {
        var res = await Promise.resolve('result')
        if (res) {
          break;
        }
      }
    }
  }
fn()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题