Javascript Vuejs上的回调函数
我试图使一个进程以同步方式运行。然而,由于我有ajax调用,这自然是异步的,所以我遇到了问题,因为我的数组只有在被调用之后才被填充。为了解决这个问题,我尝试做一个回调函数。但我没有成功 这是我的密码: (单击操作调用此函数): 调用的函数包括:Javascript Vuejs上的回调函数,javascript,callback,vue.js,vuejs2,Javascript,Callback,Vue.js,Vuejs2,我试图使一个进程以同步方式运行。然而,由于我有ajax调用,这自然是异步的,所以我遇到了问题,因为我的数组只有在被调用之后才被填充。为了解决这个问题,我尝试做一个回调函数。但我没有成功 这是我的密码: (单击操作调用此函数): 调用的函数包括: executa(user, callback) { this.montaTodos(user, { complete: callback }) }, addTodos() { const VmUser = this
executa(user, callback) {
this.montaTodos(user, { complete: callback })
},
addTodos() {
const VmUser = this
VmUser.details = VmUser.todos.map(user => {
VmUser.$bus.$emit('add-user', { user: user })
})
},
montaTodos(user) {
const VmUser = this
axios
.get(`api/gethierarquia/${user.cod_usuario}`)
.then(res => {
if (res.data.usuarios.length !== 0){
//VmUser.$bus.$emit('add-user', { user: user})
VmUser.todos.push(user)
VmUser.supervisores = res.data.usuarios
VmUser.details = VmUser.supervisores.map(user => {
VmUser.todos.push(user)
axios
.get(`api/gethierarquia/${user.cod_usuario}`)
.then(res => {
if (res.data.usuarios.length !== 0){
VmUser.funcionarios = res.data.usuarios
VmUser.details = VmUser.funcionarios.map(user => {
VmUser.todos.push(user)
})
}
})
})
}
})
},
您可以使用来等待异步请求完成,以调用addTodos
方法
我不知道您为什么向api/gethierarquia
发出两个请求。然而,我认为在你的情况下,它会像这样:
executa(user, callback) {
this.montaTodos(user).then((response) => {
this.addTodos; // gets here when the promise is resolved
}, (error) => {
console.error(error); // gets here when the promise is rejected
});
},
montaTodos(user) {
return new Promise((resolve, reject) => {
axios
.get(`api/gethierarquia/${user.cod_usuario}`)
.then((response) => {
// logic to handle response
resolve(response); // the request was successfull
})
.catch((error) => {
reject(error); // the request failed
});
});
},
谢谢你,但是没有解决我的问题。。。我不知道为什么,但最后一个函数没有被触发。你说的“最后一个函数”是什么意思?这个.addTodos()是请求失败吗?在我的简化代码中,
addTodos
将被调用,除非请求失败。我有两个ajax请求,因为其目的是构建一个用户列表。我有一级主管,对于主管,我有几个主管(第一次申请),对于每个主管,我有几个员工(第二次申请)。它起作用了。但在我设置了所有官员(董事、监事和官员)的阵列后,我需要在屏幕上显示。屏幕显示的最后一部分不会发生。通过回调执行,正是因为它只能在填充过程完成后显示在屏幕上。
executa(user, callback) {
this.montaTodos(user).then((response) => {
this.addTodos; // gets here when the promise is resolved
}, (error) => {
console.error(error); // gets here when the promise is rejected
});
},
montaTodos(user) {
return new Promise((resolve, reject) => {
axios
.get(`api/gethierarquia/${user.cod_usuario}`)
.then((response) => {
// logic to handle response
resolve(response); // the request was successfull
})
.catch((error) => {
reject(error); // the request failed
});
});
},