收藏
回答

异步接口怎么返回数据给上一级函数

问题模块
API和组件

这个问题困扰了很久了

比如

var aaa  = function bbb()

if (aaa) {
    do something
}

function bbb() {

      wx.login({

          success: function(res) {

              return res
          }
      })
}

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

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

谢谢了!

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

4 个回答

  • stephen
    stephen
    2017-02-26

    谢谢,学习了!

    2017-02-26
    赞同
    回复
  • 铜矿
    铜矿
    2017-02-25

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

    2017-02-25
    赞同
    回复
  • 铜矿
    铜矿
    2017-02-25

    我用的办法是这样的: 执行异步操作后,每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)

       }
    }


    2017-02-25
    赞同
    回复
  • stephen
    stephen
    2017-02-25

    这样也不行,

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

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

    2017-02-25
    赞同
    回复