javascript - Une question sur l'ordre d'exécution des instances de promesse?
伊谢尔伦
伊谢尔伦 2017-05-19 10:47:45
0
1
894

Récemment, parce que je voulais créer un petit programme, j'ai étudié js. Je travaillais côté serveur
La partie connexion du petit programme était plus compliquée. Plus tard, les rappels étaient trop profonds, alors j'ai continué à apprendre. . Plus tard, j'ai découvert des promesses,
mais je travaille sur des promesses et j'ai rencontré une question :

.

J'encapsule maintenant le processus de connexion dans une méthode (loginFlow), qui attrape continuellement, puis, puis. Mais j'ai une autre fonction pour obtenir la liste de contenu de l'utilisateur, alors comment dois-je effectuer cette action. Qu'en est-il de l'exécution après la connexion. ?

Dois-je ajouter un rappel à loginFlow ?
Ou devrais-je imbriquer une couche de promesse en dehors de loginFlow ?
Cela ne semble pas toujours très beau. Y a-t-il quelque chose qui ne va pas dans ma compréhension
Je suis nouveau dans js et les promesses, j'espère ? des experts peuvent me guider.

Ce qui suit est le code, loginFlow est la séquence de connexion encapsulée
this._login à l'intérieur est le wx.login encapsulé, qui renvoie une promesse
this._http à l'intérieur est le wx.request encapsulé et renvoie la promesse

  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("登录出错");
    });
  },
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

répondre à tous(1)
刘奇

La méthode then accepte deux paramètres, vous pouvez rassembler la gestion finale des erreurs et renvoyer l'instance de promesse

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal