我基本上复制粘贴此代码以异步某些函数超时,但我无法理解它。
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
/*
Some stuff
*/
sleep(10000).then(()=>{/*Do something*/});
因此,在上面,我声明了一个标记为睡眠的常量变量,该变量被分配了一个函数表达式,该表达式接受标记为毫秒的参数。
函数表达式继续调用函数Promise,该函数将执行标记为异步解析的函数表达式。
现在这部分是我感到困惑的地方。解析函数表达式调用setTimeout,以毫秒为单位等待,然后调用解析。我的理解是,上解析和嵌套解析是两个不同的函数,嵌套的只是一个名为resolve的空函数。
这两个解析了两个具有相同名称的不同函数,还是我从根本上不明白发生了什么。
最后一行只是等待睡眠的回调来执行某些功能。
另一个做所有这些函数表达式会削弱编译器的优化能力。具体来说,我读到setTimeout使用eval((,这对优化来说是有问题的。
这是一个箭头函数。
将第一个resolve
视为传递给函数的参数。
也可以这样写:
return new Promise( (resolve) => {
return setTimeout(resolve, milliseconds)
} )
或者这个:(标准功能(
return new Promise( function( resolve ) {
return setTimeout(resolve, milliseconds)
})
我的理解是上决心和嵌套决心是两个 不同的功能
它们是一样的。
const sleep = (milliseconds) => {
return new Promise((resolve) => // (1) 'resolve' var refers to a function.
setTimeout(resolve, milliseconds)) // (2) 'resolve' here refers to (1) above. In this case you, are invoking 'resolve' function without passing any value.
}
sleep(10000).then(()=>{/*Do something*/}); // (3) after 'resolve' from (2) runs, this 'do something function' receives any value from that and runs.
希望这有帮助,
干杯!
这个 ES6 片段:
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
转换为 ES5:
const sleep = function(milliseconds){
return new Promise(function(resolve){
return setTimeout(resolve, milliseconds);
}.bind(this));
}.bind(this);
所以,这里只有一个resolve
,而不是两个。
resolve
是传递给Promise
构造函数的第一个参数,它恰好是一个函数,但肯定不是函数表达式。
它的"功能表达"之后,在.then(...)
部分
。有关Promise
和箭头函数的更多信息。