解决给定方法内的所有承诺后执行方法

时间:2019-05-29 15:12:19

标签: javascript vue.js axios

在Vue.js组件中,我有一些使用axios来调用API的方法。

在不同情况下,此方法的调用解决后,我需要执行一些代码,但我不想在链接到axios的if中添加一堆.then()语句呼叫。

methods: {
  callApi() {
    axios.get('/api')
     .then(() => {
       // call has resolved, request is done
     })
  },
  firstMethod() {
    this.callApi()
    // Need to wait for the call to resolve
    // Do something
  },
  secondMethod() {
    this.callApi()
    // Need to wait for the call to resolve
    // Do something else
  }
}

如您所见,firstMethodsecondMethod都依赖于callApi,但是一旦请求完成,它们应该做不同的事情。我更喜欢将此逻辑拆分为不同的函数,而不是在callApi方法中使用条件。 有没有一种方法可以执行此操作,而不必在 callApi

2 个答案:

答案 0 :(得分:3)

adb connect Android.local:5555 返回承诺链,然后在callApifirstMethod中使用并返回它。

secondMethod

任何调用methods: { callApi() { return axios.get('/api') .then(() => { // call has resolved, request is done }) }, firstMethod() { return this.callApi() .then(() => { // Need to wait for the call to resolve // Do something }) }, secondMethod() { return this.callApi() .then(() => { // Need to wait for the call to resolve // Do something else }) } } callApifirstMethod的人都应检查故障并进行处理/报告。


您的原始代码违反了promise规则之一:该函数应始终返回链或处理拒绝。 (是的,这是 [99.9%的时间],而不是。)

答案 1 :(得分:1)

Promise链,因此您需要承诺Axios返回,执行您可能需要执行的所有处理,然后从callApi方法返回它。在调用callApi的其他方法中,您将处理返回的Promise,并将在API响应后必须运行的所有代码放入处理程序函数中。

callApi() {
  return axios.get('/api')
   .then(() => {
     // this gets handled first
   })
},
firstMethod() {
  this.callApi()
  .then(() => {
    // this gets handled second
  })
},
secondMethod() {
  this.callApi()
  .then(() => {
    // or this gets handled second
  })
}