NodeJS setTimeout / setInterval回调为字符串

时间:2015-12-28 15:36:29

标签: node.js timer

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

是否有任何实施或任何其他解决方案使这项工作? (例如,而不是调用回调,只是评估它等等。) 我只是尝试加载完全相同的原始网页,因此NodeJS只会抛出异常。

2 个答案:

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