我有这段代码:
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()
但是我得到的错误是它不是函数。
答案 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))))))