Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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
Node.js NodeJS setTimeout/setInterval回调作为字符串_Node.js_Timer - Fatal编程技术网

Node.js NodeJS setTimeout/setInterval回调作为字符串

Node.js NodeJS setTimeout/setInterval回调作为字符串,node.js,timer,Node.js,Timer,据我所知,NodeJS不支持setTimeout/setInterval函数中字符串传递的回调。(例如setTimeout(“myfunc()”,100);) 是否有任何实现或任何其他解决方案来实现此功能?(例如,不要调用回调,只需评估它,等等) 我只是尝试加载做完全相同事情的原始网页,所以NodeJS会抛出异常。我建议的一种方法是: setTimeout(function(){ eval("myfunc()") }, 100); 编辑(处理作为参数传递的evalString) 只需将本机设

据我所知,NodeJS不支持setTimeout/setInterval函数中字符串传递的回调。(例如setTimeout(“myfunc()”,100);)

是否有任何实现或任何其他解决方案来实现此功能?(例如,不要调用回调,只需评估它,等等)
我只是尝试加载做完全相同事情的原始网页,所以NodeJS会抛出异常。

我建议的一种方法是:

setTimeout(function(){
 eval("myfunc()")
}, 100);
编辑(处理作为参数传递的evalString)


只需将本机设置超时替换为您的设置超时:

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');

谢谢你的回复,但这并不是我所期望的。已经有类似setTimeout('myfunc()',0)的响应,因此我必须以某种方式将其转换为回调或eval传递的字符串。嗯,稍后将尝试,并让您知道答案,感谢您的回复!我仍然得到了意想不到的结果,虽然做的不多,但想法很好。你们想从某个网页获取整个js并在节点中执行它吗?听起来不是个好主意。。我并没有想过修补原来的功能,我太累了。谢谢,它很有魅力!
setTimeout('console.log(123)', 100);
setTimeout(function(a,b,c) {
        console.log(a, b, c); 
    }, 100, 'aaa', 'bbb', 'ccc');