据我所知,NodeJS不支持setTimeout / setInterval函数中字符串传递的回调。 (例如setTimeout(" myfunc()",100);)
是否有任何实施或任何其他解决方案使这项工作? (例如,而不是调用回调,只是评估它等等。) 我只是尝试加载完全相同的原始网页,因此NodeJS只会抛出异常。
答案 0 :(得分:2)
我建议的一种方法是:
setTimeout(function(){
eval("myfunc()")
}, 100);
编辑(处理作为参数传递的evalString)
function callMe(evalString){
return function(){eval(evalString);}
}
setTimeout(callMe('myFunc()'), 100);
答案 1 :(得分:1)
只需用你的一个替换原生的setTimeout:
setTimeout = timeoutWrapper(setTimeout);
function timeoutWrapper(origSetTimeout) {
var win = typeof global !== 'undefined' ? global : window;
function _setTimeout(fn) {
var code;
if(typeof fn === 'string') {
code = fn
fn = function wrapEval() {
eval(code);
};
}
arguments[0] = fn;
origSetTimeout.apply(win, arguments);
}
return _setTimeout;
}
测试它:
setTimeout('console.log(123)', 100);
setTimeout(function(a,b,c) {
console.log(a, b, c);
}, 100, 'aaa', 'bbb', 'ccc');