检查是否正在调用回调

时间:2019-04-25 10:51:17

标签: javascript callback asynccallback

我有一个使用回调工作的库(假定我无法编辑该库的功能)。

我想知道是否调用了回调,如果没有,请执行某些操作。

这里有一个快速的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 :(得分:0)

您可以创建两个承诺,一个包含您的回调,另一个在一定时间后抛出,然后让它们竞争:

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

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

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

但是实际上,如果出现问题,API(getUser)也应该以错误方式回调。