繁体   English   中英

在SetTimeout之后获取返回值

[英]Get return value after SetTimeout

我刚刚问过按名称调用函数,现在我想在SetTimeout之后处理return语句:

function ECall(funcName, arg)
{
    command += "(";
    for (var i=1; i<arguments.length; i++) 
    {
        command += "'" + arguments[i] + "'";
        if (i != arguments.length-1) command += ',';
    }
    command += ")";

    //var funcPtr = eval(funcName);
    //return funcPtr(arg); // This works, but I need SetTimeout

    setTimeout('window[\'' + funcName + '\']' + command, 1000);
}

setTimeout工作得很好,但我必须保存被调用函数的返回值。 当我写: setTimeout('alert(window[\\'' + funcName + '\\']' + command + ')', 1000); 它提醒功能的返回值。 我该如何存放?

您不需要使用任何此字符串操作。 只需将函数引用传递给window.setTimeout() 要存储函数的返回值,只需将其分配给传递给window.setTimeout()的函数中的变量。

var savedValue;

function ECall(funcName)
{
    var args = Array.prototype.slice.call(arguments, 1);
    var func = window[funcName];

    window.setTimeout(function() {
        savedValue = func.apply(this, args);
    }, 1000);
}

如果您想从ECall返回一个值,它将无法正常工作。

setTimeout是异步的,这意味着ECall调用setTimeout代码之前返回。

或者,如果您希望alert()成为setTimeout一部分,则可以传递匿名函数。 此外,最好不要将字符串传递给setTimeout

我会这样做:

function ECall(funcName, arg)
{
       // Get an Array of the arguments, except for the first one.
    var args = Array.prototype.slice.call( arguments, 1 );

       // Pass an anonymous function that calls the global "funcName" function
       //    inside the alert(). 
       // It uses .apply() to pass the arguments we sliced.
    setTimeout( function() {
        alert( window[ funcName ].apply( window, args ) );
    }, 1000);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM