收藏
回答

求教 promise怎么用


直接写上我的部分代码和我期待的效果,请各路大神帮忙解答下

function(){

   var bl = this.openLogin()

   //因为是wx.request是异步 ,所以这里的bl还没有赋值  请问我该怎么写?

    if (bl) {

        

   } else {

            

   }

}

openLogin:function(){

   var _this = this;

   wx.request({

       url: getApp().globalData.ctPath,

       data: {

           wxOpenid: _this.globalData.openid

       },

       header: getApp().globalData.header,

       success: function (res) {

           if (res.data.user != null) {

               return true;

           }else{

               return false;

           }

       }

   })

}




最后一次编辑于  2018-07-06  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

5 个回答

  • bLue
    bLue
    2018-07-06

    那个是异步的吧,不能直接把 openLogin() 返回值赋给 bl 的,感觉写这个 Promise 貌似没什么用啊 😂 你在 success 回调里调用你下一步操作的函数好了

    2018-07-06
    赞同
    回复 7
    • 潘斌
      潘斌
      2018-07-06

      我知道写在success里可以用  但是这个方法可能有比较多的页面要调用   我就想提取出来 然后各个页面根据true/false来判断操作  不知道能不能实现

      2018-07-06
      回复
    • bLue
      bLue
      2018-07-06回复潘斌

      那就用 async/await 吧。

      在你的代码上简单改写了一下:


      async function(){
         var bl = await this.openLogin()
          if (bl) {
               
       
         } else {
                   
       
         }
      }
       
      openLogin:function(){
         var _this = this;
         return new Promise((resolve, reject) => {
           wx.request({
               url: getApp().globalData.ctPath,
               data: {
                   wxOpenid: _this.globalData.openid
               },
               header: getApp().globalData.header,
               success: function (res) {
                   if (res.data.user != null) {
                       resolve(true)
                   }else{
                       resolve(false)
                   }
               }
           })
         })
      }


      2018-07-06
      回复
    • 潘斌
      潘斌
      2018-07-06回复bLue

      不行啊 报错了

      unknown: await is a reserved word

      2018-07-06
      回复
    • 你倒是跳啊
      你倒是跳啊
      2018-07-06回复潘斌

      要把ES6转ES5取消勾选

      2018-07-06
      回复
    • 潘斌
      潘斌
      2018-07-06

      还是不行  不弄了  我换个逻辑绕过去吧

      2018-07-06
      回复
    查看更多(2)
  • 你倒是跳啊
    你倒是跳啊
    2018-07-06

    使用es6语法

    wechatide://minicode/BVKBEHmB7YV7

    2018-07-06
    赞同
    回复
  • Afan
    Afan
    2018-07-09

    这是修改后的代码,你试试


    openLogin:function(){

       var _this = this;

    const demo= new  Promise((resolve, reject) => {

       wx.request({

           url: getApp().globalData.ctPath,

           data: {

               wxOpenid: _this.globalData.openid

           },

           header: getApp().globalData.header,

           success: function (res) {

                resolve(res)

           }

       })

    })

    demo.then(res=>{

               if (res.data.user != null) {

                   return true;

               }else{

                   return false;

               }

    })

    }


    2018-07-09
    赞同
    回复
  • 沐杉
    沐杉
    2018-07-10

    直接用 https://github.com/mushan0x0/wxapp-api-interceptors 不就得了

    2018-07-10
    赞同
    回复
  • gbkp
    gbkp
    2018-07-10

    引入es6-promise,然后使用promise,小程序原生不支持promise

    2018-07-10
    赞同
    回复