在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
}
}
如您所见,firstMethod
和secondMethod
都依赖于callApi
,但是一旦请求完成,它们应该做不同的事情。我更喜欢将此逻辑拆分为不同的函数,而不是在callApi
方法中使用条件。
有没有一种方法可以执行此操作,而不必在
callApi
?
答案 0 :(得分:3)
让 adb connect Android.local:5555
返回承诺链,然后在callApi
和firstMethod
中使用并返回它。
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
})
}
}
,callApi
或firstMethod
的人都应检查故障并进行处理/报告。
您的原始代码违反了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
})
}