我见过有人这样做:
Promise.resolve().then(fn)
在许多地方,让我想知道为什么会这样?为什么他们不能直接致电fn
?为什么要解决Promise
,然后致电fn
?
答案 0 :(得分:1)
你可以在几种情况下这样做:
您需要返回/提供承诺。 fn()
会返回fn
的返回值(如果没有指定,则为undefined
)。但是Promise.resolve().then(fn)
会产生一种承诺。 (但是,如果他们只是想要一个承诺,那么他们可以做Promise.resolve(fn())
。)
您需要确保对fn
的调用是异步发生的(因为承诺then
/ catch
/ finally
回调是异步的。)
¹具体来说,它们在 macrotask 结束后以微任务运行,并在其中排队。 JavaScript通过处理作业队列(也称为任务队列)来工作。在浏览器上,我们习惯将“macrotask”视为从浏览器调用JavaScript:主脚本运行,事件处理程序,计时器回调等。运行macrotask期间安排的任何“微任务”,按顺序,在当前macrotask结束之后但在下一个macrotask之前(即使它是在微任务之前的时间表)。许多其他环境(例如Node.js)的行为类似。
答案 1 :(得分:0)
因为..他们想要在promise已经解决或者promise已经解决并带来一些数据时执行某些任务,那么你可以使用返回的数据。
承诺可能来自API请求,可能需要一些时间才能解决,您希望对返回的数据采取行动..那么您会做什么?
Promise.resolve().then((data) => {
// now act upon the data..
})