将动作更改为异步后,我将无法分派该动作。每当我进行调度时,它都会以值false进入导管。这是我的页面,我在该页面上从挂接的钩子分派动作(我也尝试过创建)
mounted () {
this.$store.dispatch('productById', this.$route.params['id']).then((response) => {
this.product = response
})
.catch(err => {
console.log(err)
})
}
这是我的行动
async productById ({commit}, payload) {
const AuthStr = await getAdminOrRespondentAuth()
return new Promise((resolve, reject) => {
commit(PRODUCT_BY_ID)
axios.get(`${API_BASE}/products/${payload}`, {
params: {
origin: '1'
},
transformRequest: [function (data, headers) {
delete headers.common.Authorization
headers.Authorization = AuthStr
return data
}],
paramsSerializer: params => parseParams(params)
}).then(response => {
if (response.status === 200) {
commit(PRODUCT_BY_ID_SUCCESS, response.data)
resolve(response.data)
} else {
reject(response)
}
})
.catch(err => {
if (err.response.data.idStatus === 1) {
commit(PRODUCT_BY_ID_SUCCESS, err.response.data.data)
reject(err)
}
})
})
}
当Vue进入已安装的挂钩时,它将“调度动作”并直接进入catch块,而不调用我的动作。我的动作未执行。
如果我将操作更改为同步,则一切正常。我需要此操作异步,因为 getAdminOrRespondentAuth 函数调用了oidc异步方法来恢复用户。
我做错了什么?
答案 0 :(得分:0)
@ Samurai8是正确的。谢谢您的帮助。我的getAdminOrRespondentAuth没有正确返回承诺。纠正功能错误后,一切恢复正常。这是产生错误的函数,描述如下:
async function getAdminOrRespondentAuth () {
let mgr = new Mgr()
var adminToken = await mgr.getToken()
if (adminToken !== false) {
return 'Bearer '.concat(adminToken)
} else {
let usrToken = localStorage.getItem('user-token')
return 'Bearer '.concat(usrToken)
}
}
这是起作用的功能:
async function getAdminOrRespondentAuth () {
var adminToken = ''
return new Promise(async (resolve, reject) => {
let mgr = new Mgr()
try {
adminToken = await mgr.getToken()
} catch (error) {
adminToken = error
}
if (adminToken !== false) {
resolve('Bearer '.concat(adminToken))
} else {
let usrToken = localStorage.getItem('user-token')
if (usrToken !== null) {
resolve('Bearer '.concat(usrToken))
} else {
resolve('')
}
}
})
}