javascript-setTimeout返回
如果要返回值,如何使用setTimeoutjavascript-setTimeout返回,javascript,jquery,settimeout,Javascript,Jquery,Settimeout,如果要返回值,如何使用setTimeout $.each(pCodes, function(index, pCode) { setTimeout(func(parm1), 2000); }); function func(in) { var value = 999; return value; } 将其更改为: var defValue; $.each(pCodes, function(index, pCode) { setTimeout(functi
$.each(pCodes, function(index, pCode) {
setTimeout(func(parm1), 2000);
});
function func(in)
{
var value = 999;
return value;
}
将其更改为:
var defValue;
$.each(pCodes, function(index, pCode) {
setTimeout(function(){defValue=func(parm1)}, 2000);
});
通过这种方式,您可以在函数中使用defValue来访问返回的值。首先,确保将函数传递给
setTimeout
,在您的示例中,当func(param1)
直接执行func
时,您将undefined
传递给它。你想要的是这样的:
setTimeout(function() { func(parm1); }, 2000);
setTimeout(999, 2000);
对于“返回”值:使用某种回调函数,该函数在超时过期时与值一起执行。像这样:
function callback(value) {
// doSomethingWithNewValue
}
$.each(pCodes, function(index, pCode) {
setTimeout(function() { func(parm1, callback); }, 2000);
});
function func(in, callback)
{
var value = 999;
callback(value);
}
这是此类场景中使用的一般模式(请参阅)。首先,您对
setTimeout
的调用是错误的。您正在调用函数func
,然后在setTimeout
方法中使用结果。您的代码相当于:
$.each(pCodes, function(index, pCode) {
var temp = func(parm1);
setTimeout(temp, 2000);
});
由于func
返回999
,您将执行setTimeout(999,2000)
,这当然没有意义。要调用从setTimeout
中获取参数的函数,您需要一个进行该函数调用的函数:
$.each(pCodes, function(index, pCode) {
setTimeout(function() { func(parm1); }, 2000);
});
处理来自func
的返回值要复杂一些。正如稍后调用的那样,您必须稍后处理返回值。这通常是通过在返回值可用时调用的回调方法完成的:
var callback = function(value) {
// Here you can use the value.
};
$.each(pCodes, function(index, pCode) {
setTimeout(function() { func(parm1, callback); }, 2000);
});
function func(in, callback) {
var value = 999;
callback(value);
}
这很难看,但您可以使用输出参数,因为js对象是通过引用传递的:
function a() {
var param1 = 42;
var result = {};
b(param1, result);
}
function b(val, output) {
something();
output.returned = 4;
}
或者,您可以使用回调(更好的选项):
顺便说一下,您对setTimeout的调用是错误的。setTimeout接收一个函数作为第一个参数,延迟作为第二个参数-第一个参数仍然被视为常规javascript代码,因此它对其进行计算,因此setTimeout调用结果如下:
setTimeout(function() { func(parm1); }, 2000);
setTimeout(999, 2000);
因为你从函数返回999
但是,setTimeout也可以在第二个参数之后接收参数列表,因此可以将其转换为:
setTimeout(func, 2000, param1);
您将如何使用此返回值?这似乎没有多大意义。您希望将该值返回到什么?您不知道超时发生时将运行什么。我想每2秒调用函数func,并在每次调用时返回一个值。您的问题毫无意义。您希望将值返回到什么?但将值返回到何处。请参阅我的答案,了解通常用于从超时“返回”值的模式。这个想法很好且正确,但是
setTimeout(func(parm1,callback),2000)代码>是错误的,因为它将立即得到评估。您需要执行类似于setTimeout(function(){func(parm1,callback);},2000)的操作代码>调用func(parm1,callback)时,callback是变量还是函数名?