對於 setTimeout(resolve('World'), ms);
與 setTimeout(resolve, ms, 'World');
有何不同之處表示不明白。
function timeout(ms = 100) {
/*1. 为何这种写法,立即返回数据而不是等到过了 ms 后才返回*/
// return new Promise((resolve, reject) => {
// setTimeout(resolve('World'), ms);
// });
/*2. 为何这种写法,等到过了 ms 后才返回*/
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, 'World');
});
}
timeout(1000)
.then(value => {
console.log(`Hello, ${value}`);
})
.catch(err => {
console.error(err);
});
就是func()和func的差別,setTimeout的第一個參數是func,如果用func()相當於其回傳值為第一個參數。
舉例:
大致相當於:
第一個傳的參數是立即執行的,不是函數名稱
和
Promise
無關,當你執行到setTimeout(resolve('World'), ms);
時,瀏覽器就已經自動執行了resolve('World')
,舉個例子:此時
test
立即執行。setTimeout 的第一個參數要求是一個函數
一個函數
一個函數
(為什麼總有這麼多人不懂)
setTimeout(resolve, ms, 'World');
其中resolve
是一個函數,因此這段的行為正常setTimeout(resolve('World'), ms); )
不是函數
,是什麼決定於resolve 的回傳值類型,但無論如何,resolve
在註冊timer 的時候
就已經執行了,自然也就沒有延遲效果了註冊timer 的時候 就已經執行了,自然也就沒有延遲效果了====================================
以下答案作廢:沒仔細審題。 。
大致沒什麼不同。
只是! ! ! !
IE瀏覽器對
setTimeout(resolve, ms, 'World')
的支援性有問題。 (貌似是IE參考資料:(看裡面黃色背景的Note)
WindowOrWorkerGlobalScope.setTimeout()