Вызов функции, когда обещание возвращает успех или неудачу - PullRequest
0 голосов
/ 12 декабря 2018

Допустим, у меня есть код, настроенный так:

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 Я хочу иметь возможность вызывать doSomethingOnSuccess () или doSomethingOnFailure (), как только вызов axios из App1 вернет .Как я могу структурировать свой код для достижения этого, предполагая, что эти две функции не могут быть перемещены в App1.js?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Если вы не можете полностью обработать ошибку внутри 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(){...}
0 голосов
/ 12 декабря 2018

Пусть doStuff вернет обещание, а затем использует это обещание для объединения дополнительных вызовов .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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...