收藏
回答

云函数中数据库如何嵌套查询?

代码如下

await  StuCer.where({
    openid:openid
  }) .count().then(res=>{
    if(res.total==1){
      cerStuTip='已认证,即将返回首页'
    }
    else{
      cerStuTip='未认证,将进行下一步查询'
      StuInfo.where({
        Num:num
      }).count().then(res=>{
      if(res.total==1){
        cerStuTip='查询到id'
      }
      else{
        cerStuTip='未查询到id'
      }
      }) 
    }
  })
return{
cerStuTip}

控制台返回如下
result: {cerStuTip"未认证,将进行下一步查询"}


既然控制台返回打印了未认证的信息,说明代码已经运行到else阶段,为什么没有继续查询,返回的结果应当是是否查询到id中的一个

好像涉及到异步的问题,没有学过相关知识,请指教,谢谢

最后一次编辑于  2020-02-17
回答关注问题邀请回答
收藏

1 个回答

  • 333
    333
    2020-02-17

    这个部分的查询也是异步的,最好也加一下await,这样子应该就可以查询到了。

    2020-02-17
    有用
    回复 2
    • Y的平方X
      Y的平方X
      2020-02-18
      确实是异步的问题,已经验证过了。但是查阅网上资料似乎使用await必须使用async声明函数处理promise,再供调用,这样写嵌套就会比较麻烦,需要频繁的传参、取值。不知道是否我对aysnc/await的理解有误
      2020-02-18
      回复
    • FWAN
      FWAN
      2020-02-18回复Y的平方X
      async:是函数的修饰符,表函数是异步执行,是非阻塞的(全部代码执行完毕才会执行回调函数)在修饰的函数中,return返回的不再是一个值,而是一个promise对象。实际上,在async修饰的函数内使用return相当于调用一次 resolve(),使用throw相当于调用一次reject()。 
      await:是等待async返回的promise对象,即await关键字与then方法都是为了获取resolve传递的值。但是使用await会造成代码阻塞,即代码执行到出现await的地方,都会出现阻塞停顿,直到await取得一个resolve的返回值value以后,才会让代码继续往下运行下去。
      2020-02-18
      回复
登录 后发表内容
问题标签