我基本上将此代码复制粘贴为异步,某些功能会超时,但是我很难理解它。
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
/*
Some stuff
*/
sleep(10000).then(()=>{/*Do something*/});
因此,在上面我声明了一个标记为 sleep 的常量变量,该变量被分配了一个函数表达式,该函数表达式接受一个标记为 milliseconds 的参数。 。
该函数表达式继续调用函数 Promise ,该函数将异步执行标有 resolve 的函数表达式。
现在这部分让我感到困惑。 解析 函数表达式调用 setTimeout ,其等待时间为 毫秒 > ms,然后调用 解决 。我的理解是上面的 resolve 和嵌套的是两个不同的函数,而嵌套的只是一个名为 resolve 。
这两个 resolves 是两个具有相同名称的不同函数,还是我从根本上不了解正在发生的事情。
最后一行只是等待 sleep 的回调以执行某些功能。
所有这些函数表达式的另一种用法会削弱编译器的优化能力。具体来说,我读到setTimeout利用了eval(),这对于优化是有问题的。
答案 0 :(得分:0)
将第一个resolve
作为传递给函数的参数。
它也可以这样写:
return new Promise( (resolve) => {
return setTimeout(resolve, milliseconds)
} )
或者这个:(标准功能)
return new Promise( function( resolve ) {
return setTimeout(resolve, milliseconds)
})
答案 1 :(得分:0)
我的理解是,上层解决方案和嵌套的解决方案是两个 不同的功能
它们是相同的。
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.
希望这会有所帮助,
干杯!
答案 2 :(得分:0)
此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
和arrow functions的更多信息。