Vuex 派发没有 return

Vuex dispatch doesn't return

我有这个代码:

signin(context, payload, resolve) {
    console.log("SIGNIN action")

    const aemail = payload.locmail
    const apassw = payload.locpass

    backend.get("api/auth/signin", {
      headers: {
        'planck': 'FRESH'
      },
      crossDomain: true,
      params: {
        password: apassw,
        email: aemail
      }
    }).then(function(ret) {
      console.log("SENT")
      if (ret.data.auth === 'TRUE') {
        context.commit('authenticate', ret.data.planck)
        state.isAuthenticated = true
      } else {
        state.isAuthenticated = false
      }
      console.log(ret)
      return Promise.resolve(ret)
    });
  }

当我从组件调用它时:

this.$store.dispatch('signin', {
        locmail,
        locpass
      }).then(ret => {
        console.log(ret);
      });

然后控制台日志打印 undefined。我在这里做错了什么?在文档中我读到我应该使用 resolve() 但后来我得到错误,它不是一个函数。

Return backend 承诺在 signin 行动中。

  signin(context, payload) {
    // ...

    // The action needs to return a Promise
    return backend.get("api/auth/signin", {
      /* ...*/
    }).then(function(ret) {
      /* ... */
    });
  }

此外,您似乎正在更改操作中的 state 对象,这应该仅限于突变。

如果您在开发中使用 strict mode,您会看到关于此的警告。

你没有兑现承诺。按照@Emile Bergeron 的建议将您的 signin() 函数更改为:

signin(context, payload) {
    console.log("SIGNIN action")

    const aemail = payload.locmail
    const apassw = payload.locpass

    return backend.get("api/auth/signin", {
      headers: {
        'planck': 'FRESH'
      },
      crossDomain: true,
      params: {
        password: apassw,
        email: aemail
      }
    }).then(function(ret) {
      console.log("SENT")
      if (ret.data.auth === 'TRUE') {
        context.commit('authenticate', ret.data.planck)
        state.isAuthenticated = true
      } else {
        state.isAuthenticated = false
      }
      console.log(ret)
      return Promise.resolve(ret)
    });
  }