Vuex派遣不会返回

时间:2018-04-07 18:15:56

标签: javascript vue.js es6-promise vuex

我有这段代码:

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()但是我得到的错误是它不是函数。

2 个答案:

答案 0 :(得分:3)

backend操作中返回signin承诺。

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

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

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

如果您正在开发中使用strict mode,那么您会看到有关此问题的警告。

答案 1 :(得分:2)

你没有回复承诺。将您的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) }); } 功能更改为@Emile Bergeron建议:

(define (reverse! lst)
  (if (null? lst) lst
    (if (list? (car lst))
      (append (reverse! (cdr lst)) (cons (reverse! (car lst)) '()))
      (append (reverse! (cdr lst)) (list (car lst))))))