Проверьте, вызывается ли обратный вызов - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть библиотека, которая использует обратные вызовы для работы (предположим, я не могу редактировать функции этой библиотеки).

Я бы хотел знать, был ли вызван обратный вызов, и если нет, сделай что-нибудь.

Вот быстрый MCVE, чтобы раскрыть мою проблему:

const networkError = false;

(function() {
  getUser(name => console.log('Username is', name));

  if(!'Some condition that says if the callback failed')
    console.log('Network error, can not fetch name');
})();

function getUser(callback) {
  if (!networkError) callback('John Doe');
}

Конечной целью будет управление аутентификацией.Я хотел бы проверить, подключен ли пользователь, и если нет, перенаправить на другую страницу , когда пользователь не увидит содержимое зарегистрированной страницы .До сих пор все, что я нашел, - это использование Timeout с логическим значением, установленным в обратном вызове, но это не является стабильным ...

1 Ответ

0 голосов
/ 25 апреля 2019

Вы можете создать два обещания, одно обернуть ваш обратный вызов, другое бросить через определенное время, а затем позволить им участвовать в гонке:

 const timeout = time => new Promise((_, reject) => setTimeout(reject, time));

const result = Promise.race([
  new Promise(getUser),
  timeout(1000)
]);

result.then(/*..*/).catch(/*...*/)

Но на самом деле API (getUser) также должен перезвонить с ошибкой, если что-то пошло не так.

...