如何使用的setTimeout如果我想返回一个值JavaScript的 - 的setTimeout返回
$.each(pCodes, function(index, pCode) {
setTimeout(func(parm1), 2000);
});
function func(in)
{
var value = 999;
return value;
}
如何使用的setTimeout如果我想返回一个值JavaScript的 - 的setTimeout返回
$.each(pCodes, function(index, pCode) {
setTimeout(func(parm1), 2000);
});
function func(in)
{
var value = 999;
return 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);
}
将其更改为:
var defValue;
$.each(pCodes, function(index, pCode) {
setTimeout(function(){defValue=func(parm1)}, 2000);
});
这种方式,您可以用利用DefValue在你的函数访问返回值
首先,确保你传递给setTimeout
一个函数,在你的例子中你向传递了它,就像你func(param1)
执行直接。你需要的是这样的:
setTimeout(function() { func(parm1); }, 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);
}
这是在这样的场景中使用的一般模式(见event driven programming)。
这个想法很好也很正确,但是'setTimeout(func(parm1,callback),2000);'是错误的,因为它会立即被评估。你想做'setTimeout(function(){func(parm1,callback);},2000);' –
你是对的。不应该盲目复制代码。 –
当你调用func(parm1,callback)时,是回调一个变量还是函数的名字? – bob
这实在是太丑陋,但你可以使用输出参数,因为JS对象是通过引用传递:
function a() {
var param1 = 42;
var result = {};
b(param1, result);
}
function b(val, output) {
something();
output.returned = 4;
}
或者,你可以使用一个回调(更好的选择):
function a() {
var param1 = 42;
b(param1, function (newVal) {
something();
});
}
function b(val, callback) {
//something
callback(4);
}
顺便说一句,你的setTimeout调用是错误的。 setTimeout的接收函数作为第一个参数,延时作为第二 - 第一个参数仍然被视为常规的JavaScript代码,因此它的计算结果,所以你的setTimeout调用原来是这样的:
setTimeout(999, 2000);
因为你从函数返回999。
然而,setTimeout的也可以接收的参数列表中的第二个参数后,因此它可以变成这样:
setTimeout(func, 2000, param1);
你将如何使用这个返回值?这似乎没有多大意义。 – user1122345
你想要返回什么值?你不知道什么时候会发生超时运行。 – HBP
我想每2秒调用函数func并在每次调用时返回一个值。 – bob