对标题感到抱歉,但无法提出任何真正翔实和简洁的内容。
我的情况是我正在启动一个 setTimeout,我希望它能够在 JS 函数中间运行(它用于解决将 GM 函数注入(inject)网页的问题)。
unsafeWindow.testG = function(key, dValue){
var rValue;
setTimeout(function(){rValue = GM_getValue(key, dValue);}, 0);
alert(rValue);
alert(rValue);
return(rValue);
}
在三个测试中,rValue 仍然是未定义的(这是有道理的,因为 JS 大部分是单线程的)。
所以我想到了2个解决方案。
最喜欢的: 无论如何告诉 JS 在函数中间休眠并处理后台内容(如超时)?
其他: 有谁知道什么时候会调用这个超时?也许在这个函数执行之后但在调用它再次启动之前? 在这种情况下,使 rValue 全局化可以解决问题(但会使编码稍微困惑一些)。
还是等到所有JS都执行完? 在那种情况下,我可能需要另一个 setTimeout 来处理结果。
最佳答案
您的要求无法实现。在 HTML5 成为广泛传播的标准之前,如果不异步思考,您将无法完成您的要求。
例如:
unsafeWindow.testG = function(key, dValue, callback){
var rValue;
setTimeout(function(){
rValue = GM_getValue(key, dValue);
callback(rValue);
}, 0);
}
并通过回调调用它:
unsafewindow.testG(key, dValue, function(rValue) {
alert(rValue);
});
alert("foo");
对于最后一个 sippet,"foo"
会在 rValue
之前回显,因为 testG
只有在 Javascript 线程时才会执行超时函数可用,或者仅在没有其他脚本运行时可用。
关于javascript - 告诉javascript停止执行代码并在函数中间做后台工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6159432/