异步接口怎么返回数据给上一级函数
发布于 6 年前 作者 junbai 19066 次浏览 来自 问答

这个问题困扰了很久了

比如

var aaa  = function bbb()

if (aaa) {
    do something
}

function bbb() {

      wx.login({

          success: function(res) {

              return res
          }
      })
}

但这样写肯定不行, 貌似在success 里面return 无效,
怎么才能获取到aaa 的值。

怎么才能登陆成功后再往下走,不想把代码写在success里面去

谢谢了!

4 回复

我用的办法是这样的: 执行异步操作后,每2秒轮询temp,不为空则再执行后续操作


var aaa  = ''

var run=0

this.function bbb()


function bbb() {

        if (run==0){

            //等待

            wx.showToast({

              title: '登录中',

              icon: 'loading',

              duration: 10000

            })

         wx.login({
             success: function(res) {

                aaa=res
          }
      })

     run=1   //切换标志,防止重复登录

      this.bbb()   //递归

     return

    }else{

       //等待2秒后检查状态

        setTimeout(function(){

             if  (aaa!=''){

                    wx.hideToast() //关闭loading

                    return    //得到结果,终止递归

            else{

                    this.bbb()   //继续递归

                   return

            }

        },2000)

   }
}

如果要同步执行,就必须把代码写success里,可以封装成函数,就优雅多了

谢谢,学习了!

这样也不行,

做了实验,
var temp = 'aaa’
wx.login({
success: function(res) {
  temp =res
}
return temp

返回值是 aaa, 也就是说,根本不等 wx.login执行就直接返回 temp了

回到顶部