Javascript 为什么try..catch不能与chrome.windows.get一起使用?

Javascript 为什么try..catch不能与chrome.windows.get一起使用?,javascript,google-chrome,google-chrome-extension,try-catch,Javascript,Google Chrome,Google Chrome Extension,Try Catch,我正在尝试通过浏览器操作通过Chrome扩展打开窗口 var wid = null; chrome.windows.get(wid, function(chromeWin) { chrome.windows.create({'url': 'https://google.com'}, function(chromeWin) { wid = chromeWin.id; } ); }); 为了防止窗口的多个副本,我尝试检查窗口id。但如果第一次

我正在尝试通过浏览器操作通过Chrome扩展打开窗口

var wid = null;
chrome.windows.get(wid, function(chromeWin) {
    chrome.windows.create({'url': 'https://google.com'}, function(chromeWin) {
            wid = chromeWin.id;
        }
    );
});
为了防止窗口的多个副本,我尝试检查窗口id。但如果第一次使用,可以理解,它会抛出错误,因为
wid
null

错误:窗体windows.get的调用(null,函数)与定义windows.get不匹配(整数windowId,可选对象getInfo,函数回调)

我试图使用
try..catch
块,在catch中我处理的“
wid
null
”案例

但是
try..catch
没有捕获“
wid
null
”案例我知道
if
子句可能对我的实验有帮助,但我想了解
try
为什么会有这种行为。


为什么
try..catch
不缓存错误,我如何在Chrome中打开没有副本的窗口?

答案实际上相当无聊:Chrome API执行的调用验证确实有效,因为这是同步发生的:

try {
  var wid = null;
  chrome.windows.get(wid, function(chromeWin) {
    console.log("This should never be visible.");
  });
} catch(e) {
  console.log("Error caught!");
  console.warn(e);
}
这将捕获错误(并将其显示为警告)。因此,您的原始问题必须在其他地方(代码的另一部分,没有正确地重新加载代码,诸如此类)


我最初的观点是,Chrome的异步处理中发生了一些错误。这不是这个错误,而是
chrome.runtime.lastError
报告的错误。如果未检查该值,并且出现错误,则会引发无法捕获的异常,因为该异常发生在原始调用之后和回调之外


关于这方面的更多信息,但同样,这不适用于您的情况。

1。在调用函数2之前,可以检查
null
。您有两个变量
wid
winId
,因此要么代码不完整,要么输入错误。谢谢。这确实是打字错误。if子句有帮助,但会使代码变得复杂。try-and-catch看起来很简洁,但不知怎么的,它并不适用于这个代码列表。您的代码中也没有任何东西可以阻止重复出现。好的,现在我读了您的问题,它实际上是有意义的。编辑以突出显示/修复打字错误,向上投票并回答。
try {
  var wid = null;
  chrome.windows.get(wid, function(chromeWin) {
    console.log("This should never be visible.");
  });
} catch(e) {
  console.log("Error caught!");
  console.warn(e);
}