Javascript 在承诺中称呼fn有什么用?
我见过有人这样做:Javascript 在承诺中称呼fn有什么用?,javascript,Javascript,我见过有人这样做: Promise.resolve().then(fn) 在很多地方,让我想知道为什么会这样?为什么他们不能直接呼叫fn?为什么要解析一个承诺,然后调用一个fn?您可以在以下几种情况下执行此操作: 你需要回报/提供承诺fn()。但是Promise.resolve()。然后(fn)会产生一个Promise。(当然,如果他们只是想要一个承诺,他们可以做promise.resolve(fn())) 您需要确保对fn的调用是异步进行的(因为promise然后/catch/最后回调是异步的
Promise.resolve().then(fn)
在很多地方,让我想知道为什么会这样?为什么他们不能直接呼叫
fn
?为什么要解析一个承诺
,然后调用一个fn
?您可以在以下几种情况下执行此操作:
fn()。但是Promise.resolve()。然后(fn)
会产生一个Promise。(当然,如果他们只是想要一个承诺,他们可以做promise.resolve(fn())
)
fn
的调用是异步进行的(因为promise然后
/catch
/最后
回调是异步的)特别是,它们作为微任务运行,在它们排队的宏任务结束后运行。JavaScript通过处理作业队列(也称为任务队列)来工作。在浏览器上,“宏任务”是我们习惯于从浏览器调用JavaScript的东西:主脚本运行、事件处理程序、计时器回调等。在宏任务期间安排的任何“微任务”都会在当前宏任务结束后但在下一个宏任务之前按顺序运行(即使它是在微任务之前安排的)。许多其他环境(如Node.js)的行为类似。因为..它们希望在承诺已解决或承诺已解决并带来一些数据时执行某些任务,然后您可以使用返回的数据 一个承诺可能来自一个API请求,它可能需要一些时间来解决,你想对返回的数据采取行动..那么你会怎么做
Promise.resolve().then((data) => {
// now act upon the data..
})
因为承诺的结果只有在解决了hanks之后才能使用。第2点真的很有用!@batman-是的,我曾经意识到第1点有点弱,你可以只做
promise.resolve(fn())
:-)