收藏
回答

js如何跳出for循环?

请问js,for循环内,逐个查询数据库。当符合某条件时,如何跳出for循环?

目前使用break出错,微信开发工具点击“编译”,显示:Unsyntactic break。

最后一次编辑于  2021-04-15
回答关注问题邀请回答
收藏

4 个回答

  • 金煜峰
    金煜峰
    2021-04-15
    // 如果设置了 es6转es5 要开启 增强编译
    (async () => {
      for (var i = 0; i < arr.length; i++) {
      var res = await db.collection('xx').where({
       yy: arr[i]
      }).get()
      console.log(i, res)
      if (res.data.xxx)
       break
     }
    })()
    
    2021-04-15
    有用
    回复 10
    • 笑微微
      笑微微
      2021-04-16
      谢谢。按照您的方法,在该function加了async,然后在db前加了var res=await ,编译时出错:unknown: Can not use keyword 'await' outside an async function。(已经设置:es6转es5 开启 增强编译)
      2021-04-16
      回复
    • 金煜峰
      金煜峰
      2021-04-16回复笑微微
      说明 async 放的位置不对呗
      2021-04-16
      回复
    • 笑微微
      笑微微
      2021-04-16
      按照您的例子,放在for前面。(async。。。})(),提示async前面没有function;把(..)()去掉,运行时代码直接跳过。。请问async应该放在哪里?
      2021-04-16
      回复
    • 金煜峰
      金煜峰
      2021-04-16回复笑微微
      截图你的代码
      2021-04-16
      回复
    • 笑微微
      笑微微
      2021-04-16回复金煜峰
      目前在这个代码试用。部分以aabbcc代替。    
             async () => {
                  for (let i = 0; i < pnum; i++) {//.
                   var ru = await wx.cloud.callFunction({
                      name: "cc",
                      data: {
                        optype: 'aa',
                        fValue1: bb,
                      } })
                        console.log(ru)
                        if(ru.result==='error1'){
                          errFlag=1
                          console.log('errFlag',errFlag,i)
                          break
                        }else if(ru.result==='error2'){
                          errFlag=2
                          console.log('errFlag',errFlag,i)
                          break
                        }
                  }
                  }
      2021-04-16
      回复
    查看更多(5)
  • 笑微微
    笑微微
    2021-04-15

    谢谢。再试了一下,普通的for循环,break可以跳出;但是在查询数据库语句里面,点击“编译”,就出错(代码片段因为读取数据表,录制不了)。显示unknown: Unsyntactic break。具体如下:

    arr是一维数组

    for(i=0;i<arr.len;i++){

    db.collection('xx').where({

    yy:arr[i]

     }).get({

    success(rf) { //每次查询结果只有一条数据

    console.log('i',i)

    if(k == zz){ //如果符合某个条件,跳出for循环。这里只是举例子。

        break

     } 

    }

    })

    }

    2021-04-15
    有用
    回复 10
    • 啥时给
      啥时给
      发表于小程序端
      2021-04-15

      for里面使用异步?而且你的break在回调函数里。

      2021-04-15
      回复
    • 浪花骑士
      浪花骑士
      2021-04-15
      你在for里面使用异步,意思就是代码帮你重复了执行几次异步,
      那几次异步都是独立的,和for循环没啥关系了,
      而且那几个重复执行的异步之间也不会按照你期望的顺序执行.
      异步的执行栈也不在for循环里了.
      如果期望每个异步按顺序执行,
      试试用异步遍历
      2021-04-15
      回复
    • 浪花骑士
      浪花骑士
      2021-04-15
      异步遍历如下图,
      要判断跳出之类的自己加吧
      2021-04-15
      回复
    • 笑微微
      笑微微
      2021-04-15回复浪花骑士
      谢谢。我改了一下上面的描述,以更加贴合实际代码。异步顺序执行没有问题。期望遇到某个符合条件,跳出for。现在问题是break在这里是否不行?跳出适合用哪个?
      2021-04-15
      回复
    • 浪花骑士
      浪花骑士
      2021-04-16回复笑微微
      看起来你还没理解"异步遍历",不然也不会问说怎么跳出
      2021-04-16
      回复
    查看更多(5)
  • 郑钱花
    郑钱花
    2021-04-15

    正常就是break跳出循环。你写的不行就贴代码片段

    2021-04-15
    有用
    回复
  • 浪花骑士
    浪花骑士
    2021-04-15

    代码片段贴一下,否则基本没人知道你在说啥

    https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2021-04-15
    有用
    回复
登录 后发表内容
问题标签