Vue/Bluebird: 那么回调不会 运行

Vue/Bluebird: then callback doesn't run

this.getStationsAsync() 的 then() 永远不会运行。 catch() 也没有,所以可能没有任何东西被拒绝。 Promise.promisify(this.getStations) 有什么问题吗?

我也在 created() 挂钩中尝试了 this.getStationsAsync = Promise.promisify(this.getStations)。我没有收到任何错误,但也没有收到任何 console.logs() 表明 then() 已执行。

import Vue from 'vue'
import axios from 'axios'
import Promise from 'bluebird'

methods:{
createStationMarkers (selectedNetworkMarker) {
      this.selectedNetwork = selectedNetworkMarker
      this.hideNetworkMarkers()
      debugger
      this.getStationsAsync()
      .then(() => {
        debugger
        console.log('inside then')
        this.addStationMarkers()
        this.test = true
      })
      .catch(error => {
        console.log(error)
      })
    }
},
getStations () {
      axios
        .get('/api/network/' + this.selectedNetwork.id)
        .then(res => {
          for (let station of res.data.stations) {
            this.stations.push(station)
          }
          return res.data.stations
        })
        .catch(error => {
          console.log(error)
        })
    }
}

computed: {
    getStationsAsync () {
      return Promise.promisify(this.getStations)
    }
  }

你需要return axios 调用的结果,这是一个承诺。

getStations () {
  return axios
    .get('/api/network/' + this.selectedNetwork.id)
    .then(res => {
      for (let station of res.data.stations) {
        this.stations.push(station)
      }
      return res.data.stations
    })
    .catch(error => {
      console.log(error)
    })
  }
}

蓝鸟是不必要的。只需从 createStationMarkers.

调用 getStations