Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeout和带有承诺的语法?_Javascript_Promise_Settimeout - Fatal编程技术网

Javascript setTimeout和带有承诺的语法?

Javascript setTimeout和带有承诺的语法?,javascript,promise,settimeout,Javascript,Promise,Settimeout,我正在读一本关于javascript的书,其中有一段代码我不懂 setTimeout( () => setTimeout(console.log, 0 , value *2), 1000); 这里到底发生了什么?有两种,我想我只理解其中的一种。我不明白()=>函数在做什么?你能解释一下吗 我相信: setTimeout(console.log, 0 , value *2) 它在0毫秒后将参数“value*2”传递给函数/方法控制台.log()。我也知道setTimeout()返回tim

我正在读一本关于javascript的书,其中有一段代码我不懂

setTimeout( () => setTimeout(console.log, 0 , value *2), 1000);
这里到底发生了什么?有两种,我想我只理解其中的一种。我不明白()=>函数在做什么?你能解释一下吗

我相信:

setTimeout(console.log, 0 , value *2)
它在0毫秒后将参数“value*2”传递给函数/方法控制台.log()。我也知道setTimeout()返回timeoutId

其余的我不知道

我看到与以下代码类似的内容:

let p1 = new Promise((resolve, reject) => resolve());
setTimeout(console.log, 0, p1);  //Promise <resolved>
let p1=新承诺((解析,拒绝)=>resolve());
setTimeout(console.log,0,p1)//允诺
我也不明白。setTimeout(()=>setTimeout(console.log,0,value*2),1000)将超时设置为。。。设置一个超时。因此,当外部超时在1秒后结束后,调用内部函数(
()=>{…}
是一个箭头函数,您现在可以将其理解为
function(){…}
)。此函数设置另一个延迟为0的超时,然后调用console.log,将
值*2
作为参数传递。因此,1秒后,
value*2
被记录到控制台

对于承诺代码,行
让p1=新承诺((解析,拒绝)=>resolve())创建可立即解决的承诺。因此,在下一行,当promise被记录到控制台时,它会显示
promise

setTimeout(function() { console.log(value *2) }, 0)
所以

表示设置一秒的超时,这将设置另一个0秒的超时,并打印
value*2

let p1 = new Promise((resolve, reject) => resolve());
setTimeout(console.log, 0, p1);

表示在0秒后打印承诺
p1
,这是一个箭头函数。因此,这是一个
setTimeout
,它需要1秒的时间来启动内的箭头函数,它返回另一个
setTimeout
(因为没有
{}
),它在0毫秒后将
值*2
传递给它,然后启动
console.log
。这是家庭作业吗?我这样问是因为,除了教育性的解释,这是毫无意义的代码——没有理由这样做。使用单个
setTimeout()
可以得到相同的结果。哦,我应该声明
setTimeout
确实返回
timeoutID
,但它会根据第二个参数的毫秒(异步)触发传递给第一个参数的函数。所有附加参数都会传递给函数参数。
setTimeout( () => setTimeout(console.log, 0 , value *2), 1000);
let p1 = new Promise((resolve, reject) => resolve());
setTimeout(console.log, 0, p1);