我有一个使用回调工作的库(假定我无法编辑该库的功能)。
我想知道是否调用了回调,如果没有,请执行某些操作。
这里有一个快速的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,但这根本不稳定...
答案 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
)也应该以错误方式回调。