首页 > 解决方案 > 承诺没有按预期执行

问题描述

在 fetchUser 操作返回一个承诺后应该调用一个操作。这是获取用户的代码:

fetchUser({ commit }, user) {
let promise = new Promise((resolve, reject) => {
        if (user.uid) { 
          commit("SET_LOGGED_IN", user !== null)
          //  do something ...
          console.log('Resolving promise')
          resolve(user);
          } else {
            commit("SET_USER", null)
            console.log('Rejecting promise')
            reject();
          }

        }
      });
      return promise;
    },

并且行动是

someAction: firestoreAction(({ bindFirestoreRef, getters }) => {
      let user = getters.user;
      let promise = dispatch('fetchUser', {user});
      console.log(`promise is ${promise}`);

//-----NEVER EXECUTES THIS STEP, SIMPLY GOES BLANK HERE----

      promise.then(function(user) {
      return bindFirestoreRef(
        //dosomething...
      });
      return promise;
    }),

承诺没有按预期执行。不知道我在这里做错了什么,承诺之后的“然后”永远不会执行。

有人可以指出我在这里做错了什么吗?

标签: javascriptvue.jspromise

解决方案


在传递用户的行中,您将其放在 name 下的对象中user

  let promise = dispatch('fetchUser', {user});

所以你必须访问user.uidlike user.user.uid,只需传递user对象。像这样:

  let promise = dispatch('fetchUser', user);

如果您在承诺中添加一个catch,则该承诺将被解雇


推荐阅读