当promise返回成功或失败时调用函数

时间:2018-12-12 19:50:58

标签: javascript promise

假设我已经设置了如下代码:

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,如何构造代码来实现这一点?

2 个答案:

答案 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)
}