代码之家  ›  专栏  ›  技术社区  ›  batman

在已决的诺言中叫新生力量有什么用?

  •  0
  • batman  · 技术社区  · 6 年前

    我见过有人这样做:

    Promise.resolve().then(fn)

    在很多地方我都想知道为什么会这样?为什么他们不能打电话 fn 直接?为什么要解决 Promise 然后打电话给 FN ?

    2 回复  |  直到 6 年前
        1
  •  1
  •   T.J. Crowder    6 年前

    你可以在几种情况下这样做:

    1. 你需要回报/承诺。 fn() 将导致返回值为 fn (或) undefined 如果它没有指定一个)。但是 Promise.resolve().then(fn) 结果是一个承诺。(当然,如果他们只是想要一个承诺,他们可以 Promise.resolve(fn()) )

    2. 你需要确保 FN 异步发生(因为承诺 then / catch / finally 回调是异步的。


    确切地说,他们是 微任务 结束后跑步 宏观任务 他们在那里排队。javascript通过处理作业队列(也称为任务队列)工作。在浏览器上,“macrotask”是我们习惯于认为是从浏览器调用javascript的:主脚本运行、事件处理程序、计时器回调等。在macrotask期间调度的任何“microtask”都是在当前macrotask结束后、下一个macrotask之前运行的。宏任务(即使它是在微任务之前安排的)。许多其他环境(如node.js)的行为类似。

        2
  •  0
  •   Ashish Ranjan    6 年前

    因为..他们希望在承诺已解决或承诺已解决并带来一些数据时执行某些任务,然后可以使用返回的数据。

    一个承诺可能来自一个api请求,这个请求可能需要一些时间来解决,您需要对返回的数据执行操作。那你会怎么做??

    Promise.resolve().then((data) => {
       // now act upon the data..
    })