检查是否正在调用回调

问题描述 投票:0回答:1

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

我希望能够知道是否已经调用了回调,如果没有,则执行某些操作。

这是一个快速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,但这根本不稳定......

javascript callback asynccallback
1个回答
0
投票

你可以创建两个promises,一个包装你的回调,另一个在一段时间之后抛出,然后让它们竞争:

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.