如何使用的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