首頁  >  問答  >  主體

javascript - promise實例執行先後順序的疑問?

最近因為要做小程式, 就研究了js, 以前是做服務端的,
小程式登入那塊比較複雜, 後來回調嵌套太深, 就不斷學習, 後來發現了promise,
但是在做promise的時候遇到一個疑問:

我現在把登入流程封裝到一個方法(loginFlow)裡, 這個方法裡不斷的then,then,then,catch. 但是我有另一個功能是獲取該用戶的內容列表, 那麼我應該怎麼讓這個動作在login後面執行呢?

難道是在loginFlow 加個callback?
還是說在loginFlow 外層嵌套一層promise?
總感覺都不是很美, 難道是哪裡理解的不對?
初學js和promise , 望高手指引.

下面是程式碼, loginFlow是封裝好的登入順序
裡面的this._login 就是封裝的wx.login, 回傳了promise
裡面的this._http 就是封裝的wx.request 回傳了promise

  loginFlow: function() {
    var that = this;

    this._login({}).then(function(res) {
      // 用 code 去获取 session
      let options = {
        url: that.globalData.apiDomain + '/mina/session',
        method: 'GET',
        data: {
          code: res.code
        }
      }
      return that._http(options);

    }).then(function(res) {
      // 把 session 放入 storage, 并且获取用户信息
      wx.setStorageSync('session', res.data.session);
      return this._getUserInfo({});

    }).then(function(resUser) {
      // 把用户信息上传
      let options = {
        url: that.globalData.apiDomain + '/mina/user/info',
        method: 'POST',
        data: resUser
      };
      return that._http(options);

    }).then(function(res) {
      // 上传信息结果成功
      if (res.statusCode == 200) {
          // 把用户信息保存到本地
          
      } else {
        // 程序逻辑返回了失败, 提示?
        return Promise.reject(new Error("程序逻辑错误, 保存用户信息失败"));
      }
      
    }).catch(function(err) {
      // 登录出错
      that._alert("登录出错");
    });
  },
伊谢尔伦伊谢尔伦2729 天前887

全部回覆(1)我來回復

  • 怪我咯

    怪我咯2017-05-19 10:49:45

    then 方法接受兩個參數,你可以把最後的錯誤處理放在一起,然後回傳promise實例

    回覆
    0
  • 取消回覆