2 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
你的setTimeout的寫(xiě)法是錯(cuò)的(如果我沒(méi)猜錯(cuò)你的原意的話),setTimeout的第一個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),第二個(gè)參數(shù)是延遲執(zhí)行的毫秒數(shù)。你的第一個(gè)參數(shù)雖然好像是一個(gè)函數(shù),但你把這個(gè)函數(shù)用括號(hào)括起來(lái),又在后面加了個(gè)括號(hào)立即去調(diào)用它,這樣setTimeout的第一個(gè)參數(shù)遍被你設(shè)置成了這個(gè)函數(shù)的返回值而不是讓setTimeout來(lái)幫你執(zhí)行這個(gè)函數(shù),從你寫(xiě)的這個(gè)函數(shù)來(lái)看,這個(gè)返回值應(yīng)該是undefined
,而undefined
不是一個(gè)函數(shù),它不是可調(diào)用的,我猜node里報(bào)的錯(cuò)應(yīng)該是類(lèi)似
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function
at setTimeout (timers.js:425:11)
這樣的錯(cuò)誤吧?
正確的寫(xiě)法應(yīng)該是:
setTimeout(function() {
// Do something here
}, someTime);
換種說(shuō)法就是,你需要傳給setTimeout的第一個(gè)參數(shù)是一個(gè)函數(shù)指針/引用,而不是當(dāng)場(chǎng)調(diào)用這個(gè)函數(shù)——這樣你將把函數(shù)的返回值而不是這個(gè)函數(shù)本身作為第一個(gè)參數(shù)傳入。
另外,setTimeout確實(shí)是異步的,并且現(xiàn)在推薦用setImmediate
代替setTimeout(func, 0)
。
添加回答
舉報(bào)