對於 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);
});
習慣沉默2017-06-12 09:23:50
就是func()和func的差別,setTimeout的第一個參數是func,如果用func()相當於其回傳值為第一個參數。
舉例:
function test(){
console.log('this is test!');
return function () {
console.log('this is return!');
}
}
setTimeout(test(), 1000);
大致相當於:
console.log('this is test!');
setTimeout(function () {
console.log('this is return!');
}, 1000);
淡淡烟草味2017-06-12 09:23:50
和Promise
無關,當你執行到setTimeout(resolve('World'), ms);
時,瀏覽器就已經自動執行了resolve('World')
,舉個例子:
var test = function(value){
console.log(value);
}
setTimeout(test('hello') , 2000);
此時test
立即執行。
曾经蜡笔没有小新2017-06-12 09:23:50
(為什麼總有這麼多人不懂)
setTimeout(resolve, ms, 'World');
其中resolve
是一個函數,因此這段的行為正常setTimeout(resolve('World'), ms); )
不是函數
,是什麼決定於resolve 的回傳值類型,但無論如何,resolve
在註冊timer 的時候
就已經執行了,自然也就沒有延遲效果了註冊timer 的時候 就已經執行了,自然也就沒有延遲效果了
巴扎黑2017-06-12 09:23:50
====================================
以下答案作廢:沒仔細審題。 。
大致沒什麼不同。
只是! ! ! !
IE瀏覽器對setTimeout(resolve, ms, 'World')
的支援性有問題。 (貌似是IE <= 9 都會出問題)
參考資料:(看裡面黃色背景的Note)
WindowOrWorkerGlobalScope.setTimeout()