Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vuejs上的回调函数_Javascript_Callback_Vue.js_Vuejs2 - Fatal编程技术网

Javascript Vuejs上的回调函数

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

我试图使一个进程以同步方式运行。然而,由于我有ajax调用,这自然是异步的,所以我遇到了问题,因为我的数组只有在被调用之后才被填充。为了解决这个问题,我尝试做一个回调函数。但我没有成功

这是我的密码:

(单击操作调用此函数):

调用的函数包括:

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
      });
  });
},