Javascript 检查是否正在调用回调

Javascript 检查是否正在调用回调,javascript,callback,asynccallback,Javascript,Callback,Asynccallback,我有一个使用回调的库(假设我不能编辑该库的函数) 我想知道是否调用了回调,如果没有,请做些什么 下面是一个快速的MCVE,以暴露我的问题: const networkError=false; (功能(){ getUser(name=>console.log('Username is',name)); if(!'说明回调是否失败的某些条件') log('网络错误,无法获取名称'); })(); 函数getUser(回调){ 如果(!networkError)回调('John Doe'); }您可

我有一个使用回调的库(假设我不能编辑该库的函数)

我想知道是否调用了回调,如果没有,请做些什么

下面是一个快速的MCVE,以暴露我的问题:

const networkError=false;
(功能(){
getUser(name=>console.log('Username is',name));
if(!'说明回调是否失败的某些条件')
log('网络错误,无法获取名称');
})();
函数getUser(回调){
如果(!networkError)回调('John Doe');

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

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

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

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

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

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

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

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

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

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

回调是同步调用还是异步调用。如果是异步的,您要等待执行多长时间?您不能在getUser中编辑哪个函数或回调函数?@Ashish它是异步的,我想使它同步(如果可能的话),这样我就不必玩超时了。@ducmai我可以编辑回调函数,不是IIFE之外的函数。@trichetriche您已经告诉过您只能修改回调函数,不能修改调用回调的函数,因此如果行为是异步的。您不能使其同步。回调是以同步方式调用还是异步方式调用。如果是异步的,您要等待执行多长时间?您不能在getUser中编辑哪个函数或回调函数?@Ashish它是异步的,我想使它同步(如果可能的话),这样我就不必玩超时了。@ducmai我可以编辑回调函数,不是IIFE之外的函数。@trichetriche您已经告诉过您只能修改回调函数,不能修改调用回调的函数,因此如果行为是异步的。你不能使它同步。这就是问题所在,我不想使用超时。如果我这样做,用户将能够在重定向之前浏览页面。然后你的API被破坏。可能不是API,但肯定是过程。谢谢你的意见,不过,我会尝试谈判,以避免这种解决方案!这就是问题所在,我不想使用超时。如果我这样做,用户将能够在重定向之前浏览页面。然后你的API被破坏。可能不是API,但肯定是过程。谢谢你的意见,不过,我会尝试谈判,以避免这种解决方案!