JavaScript Promise使用setTimeout解决问题

5

我不明白为什么第一个setTimeout函数可以正常工作,但第二个却不能。当我运行第二个setTimeout时,第一个被注释掉了。但是它没有在3秒后解决,而是立即解决了。

我对“promise”这个东西很陌生,我正在学习的教程经常使用带有setTimeout的promise。

  let promise = new Promise( ( resolve, reject ) => {

     /* why does setTimeout work with this one... */
     setTimeout( () => resolve( 'Job\'s done!!!' ), 3000 );

     /* but not with this one */
     setTimeout( resolve('done'), 3000 );
  } );

  promise.then(
     result => alert( result )
  );


2
因为第二个调用了该方法并返回其返回值以便被 setTimeout 调用... - epascarello
1个回答

5
/* why does setTimeout work with this one... */
 setTimeout( () => resolve( 'Job\'s done!!!' ), 3000 );

当超时发生时,您调用一个函数() => ...,该函数在执行直到解决承诺。
/* but not with this one */
 setTimeout( resolve('done'), 3000 );

在这里,您实际上解决了Promise(执行结果函数),并将结果传递给setTimeout函数。

写作

() => resolve( 'Job\'s done!!!' )

等同于

function() {
    resolve( 'Job\'s done!!!' );
}

是的,那确实很有道理。谢谢。 - Ivan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接