Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chrome.notifications.create()在单击时提供了错误的id_Javascript_Google Chrome_Google Chrome Extension_Settimeout - Fatal编程技术网

Javascript chrome.notifications.create()在单击时提供了错误的id

Javascript chrome.notifications.create()在单击时提供了错误的id,javascript,google-chrome,google-chrome-extension,settimeout,Javascript,Google Chrome,Google Chrome Extension,Settimeout,第一个帖子在这里。这是一个关于个人项目的问题,我已经面对了好几次了。我曾经在这里找到过一个类似的话题,但我再也找不到了,而且这个问题也没有得到回答。 我必须承认我的标题有点奇怪,但我找不到更好的方式来解释它。不管怎样,我们走吧 我有这个函数: (正确给出url和时间,这不是问题) 函数setTimer(url,时间){ var timeHR=时间/1000/60; idTimerString=saveTimer(url,timeHR); log(idTimerString); setTimeou

第一个帖子在这里。这是一个关于个人项目的问题,我已经面对了好几次了。我曾经在这里找到过一个类似的话题,但我再也找不到了,而且这个问题也没有得到回答。
我必须承认我的标题有点奇怪,但我找不到更好的方式来解释它。不管怎样,我们走吧

我有这个函数:
(正确给出url和时间,这不是问题)

函数setTimer(url,时间){
var timeHR=时间/1000/60;
idTimerString=saveTimer(url,timeHR);
log(idTimerString);
setTimeout(函数(){
变量选项={
类型:“基本”,
标题:“以后再提醒我!”,
消息:(“您让我提醒您:\n'+url+'\n'+timeHR+'分钟前。单击打开它!”),
iconUrl:'img/icon.png'
}
chrome.notifications.create(idTimerString、选项、函数(cb){
控制台日志(cb);
});
},时间);
}
当调用此函数一次时没有问题,延迟后会正确显示。如果我在单击第一个通知时创建了一个30mn(id=1)的呼叫,然后再创建一个60mn(id=2)的呼叫,我将收到id 2,第二个通知也是如此。
但我应该有身份证1然后才有身份证2!你知道为什么吗


我的扩展已经上线了,因为您想测试这个bug,但我认为这会被视为广告。

这很可能是一个关闭范围问题。尝试将
idTimerString
设置为函数的本地

var idTimerString = saveTimer(url, timeHR);

你能为它创建一个函数吗?什么时候调用setTimer?您知道idTimerString的作用域比该函数更大吗?如果它们是同时创建的,那么idTimerString的值将在超时函数命中时发生更改……我同意这很可能是一个闭包问题。当达到第一次通知的超时时间时,
idTimerString
的值将为
2
。尝试在函数中的
idTimerString
之前添加
var
。这将使idTimerString成为本地的,并避免这种依赖。它似乎解决了问题,我得到了一个好主意,它打开了一个好页面(和它的一个实例)!我正在做更多的研究,我会把你的答案标记为接受,谢谢!