如何确保一个函数调用在另一个之后发生

时间:2017-07-24 03:54:51

标签: javascript async-await

在我的网络应用程序中,有两个javascript函数submitJobfetchJobs。我想在fetchJob的末尾调用submitJob,以便用户可以看到已创建新作业(this.jobs已连接到某些显示元素)。现在,数据库确实已更新,但前端没有更新(除非我刷新网页)。我的javascript代码如下所示

submitJob: async function() {
  try {                                                                        
    let sel = document.getElementById('jobPriority')                           
    let priority = Number(sel.options[sel.selectedIndex].value);  
    let jobData = {'priority': priority, 'data': ''};                          
    let response = await axios.post('/api/jobs/', json=jobData,                
            {headers: {'Authorization': "Bearer " + this.token}});             
  } catch (error) { this.handleError(error); };                                
  this.fetchJobs();                                                     
},                                                                             
fetchJobs: async function() {                                           
  try {                                                                        
    let response = await axios.get('/api/jobs/',                               
            {headers: {'Authorization': "Bearer " + this.token}});             
    this.jobs = response.data;                                                 
  } catch (error) { this.handleError(error); };   
},

我怀疑fetchJobsaxios.post返回后没有被调用。我该如何保证?我尝试将this.fetchJobs()置于try语句中,但它也无效。

  

更新:根据服务器日志,没有GET请求。只有成功的POST请求。不知道为什么会这样。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以在javascript中使用promised和asyc,如下所示

function resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

async function add1(x) {
  var a = resolveAfter2Seconds(20);
  var b = resolveAfter2Seconds(30);
  return x + await a + await b;
}

add1(10).then(v => {
  console.log(v);  // prints 60 after 2 seconds.
});

async function add2(x) {
  var a = await resolveAfter2Seconds(20);
  var b = await resolveAfter2Seconds(30);
  return x + a + b;
}

add2(10).then(v => {
  console.log(v);  // prints 60 after 4 seconds.
});