äußerte Verwirrung über den Unterschied zwischen 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('World')
不是函数,是什么决定于resolve
的返回值类型,但无论如何,resolve
在 注册 timer 的时候 就已经执行了,自然也就没有延迟效果了====================================
以下答案作废:没仔细审题。。
大致没什么不同之处。
只是!!!!
IE浏览器对
setTimeout(resolve, ms, 'World')
的支持性有问题。(貌似是IE <= 9 都会出问题)参考资料:(看里面黄色背景的Note)
WindowOrWorkerGlobalScope.setTimeout()