想要对闭包、范围和异步进行一些澄清



我基本上复制粘贴此代码以异步某些函数超时,但我无法理解它。

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和箭头函数的更多信息。

相关内容

  • 没有找到相关文章

最新更新