Javascript在for循环中等待处理请求
Javascript wait for request to process in a for loop
在我的chrome扩展中,我正在检查一个函数,该函数可以阻止我的for循环处理,直到它从内容脚本中得到响应。共享下方的样本代码
function abc() {
chrome.tabs.query({'status': 'complete'}, function(tabArray) {
for (var i = 0, tab; tab = tabArray[i]; i++) {
var currentUrl = tab.url;
var tabId = tab.id;
if (currentUrl.match(otherthing)) {
chrome.tabs.sendRequest(tabId, {'type': 'getrequiredthing'},
function(response) {
if (response.isrequiredthind) {
callfunction(tabId);
}
}
);
}
}
});
}
在这里,当我在else if
中获得匹配的url时,我会向页面发送一个获取一些信息的请求,如果我的信息是肯定的,我需要调用函数。但在for循环中,tabId迭代得非常快,即使响应是肯定的,它也会使用next(或next)tabId调用调用函数。
你能给出你对解决这个问题的意见吗?请等待这个回复。
感谢
问题是sendRequest的第三个参数在请求准备好时没有阻止。从设计上讲,JavaScript几乎从不阻塞。这是一件好事。相反,它使用了一个"事件驱动"的模型。
另一个问题是由于词法范围:当调用callfunction时,tabId具有最新的值,而不是调用sendRequest时的值。为了解决这个问题,您需要为每个循环迭代创建一个单独的范围,例如
for (...) {
var tabId = ...;
if (...) {
(function (localTabId) {
chrome.tabs.SendRequest(..., function (response) {
if (response.isrequiredthind) {
callfunction(localTabId);
}
}
})(tabId);
}
}
相关文章:
- Javascript在for循环中等待处理请求
- 强制jQuery Deferred等待Ajax在“”中完成;那么“;处理程序
- Chrome 扩展程序会等待设置加载到事件处理程序中
- 等待图标,用于通过 ashx 处理程序在浏览器中加载 pdf
- 如何等待ajax成功处理程序完成后再执行另一个
- JavaScript var 在等待 jQuery 完成动画处理时被覆盖
- 可以上传表单提交等待文件处理完成
- RxJS 在处理下一个缓冲块之前等待 ajax respose
- 等待完成 PHP 处理的最佳方法
- 如何在函数完成后使用 jQuery 进行动画处理 - 让第二个函数等待
- 如何等待主干中的所有事件处理程序
- 等待 ajax 返回的正确方法(我不想使用成功处理程序
- 在Angular中,如何等待工厂函数完成并处理输出?
- 如何让用户的点击等待2分钟后才被处理
- 处理和等待之前的JavaScript调用完成
- jQuery/JS -等待JSON块处理完成后再开始下一个块
- 如何让jQuery等待图像列表加载后再处理它们
- 指令如何等待元素'动态插值属性被处理?
- 如何使批处理文件等待Excel宏完成
- 等待处理完成后再导出Node.js模块