假设我已经设置了如下代码:
App1.js
function doStuff() {
axios.get("/api/endpoint").then(response => {
// do App1.js-specific stuff
}).catch(error => {
// do App1.js-specific error handling
});
}
App2.js
function invokeStuff(){
doStuff();
}
function doSomethingOnSuccess(){...}
function doSomethingOnFailure(){...}
在App2.js中,我希望能够在App1的axios调用返回后立即调用doSomethingOnSuccess()或doSomethingOnFailure()。假设这两个函数无法移入App1.js,如何构造代码来实现这一点?
答案 0 :(得分:1)
如果您无法完全处理doStuff
内部的错误,则应重新抛出该错误(或抛出一个新的错误):
function doStuff() {
return axios.get("/api/endpoint").then(response => {
// do App1.js-specific stuff
}).catch(error => {
// do App1.js-specific error handling
throw error; // rethrow
});
}
App2.js:
function invokeStuff(){
doStuff().then(doSomethingOnSuccess, doSomethingOnFailue);
}
function doSomethingOnSuccess(){...}
function doSomethingOnFailure(){...}
答案 1 :(得分:-1)
让doStuff返回Promise,然后使用该Promise链接其他.then调用。您在doStuff中有个难处,因此可以在处理错误时首先得到帮助。如果您无法处理任何事情,可以将其重新扔出
function doStuff() {
return axios.get("/api/endpoint").then(response => {
// do App1.js-specific stuff
}).catch(error => {
// do App1.js-specific error handling
return Promise.reject(error); // if not handled
});
}
//...
function invokeStuff(){
doStuff()
.then(doSomethingOnSuccess)
.catch(doSomethingOnFailure)
}