javascript - 在 Node REPL 中,Promise 中的副作用在定义函数时运行,而不是在调用函数时运行

标签 javascript node.js promise

这是我没有预料到的 Promise 行为。

我正在掌握 Promise 的异步特性,并为控制流创建 Promise 序列。但是,我担心我的控制流的同步性没有得到尊重。

在下面的示例中,Promise 的副作用似乎是在定义 Promise 时调用的,而不是在运行时调用的。在本例中,我所说的“副作用”具体指的是 console.log,但在我的应用程序中,我还在 Promise 解析器中进行了一些全局配置。

在此示例中,我正在使用相对较新的版本 v5.11.2 运行 nodejs REPL。

> testFn = new Promise(function(resolve, reject){
      console.log("called when promise defined");
      resolve("called when promise invoked")
  })
called when promise defined
Promise { 'called when promise invoked' }
> testFn.then(function(res){console.log(res)})
Promise { <pending> }
> called when promise invoked

promise 的 resolvereject 值是在调用函数之前计算的吗?在这个 REPL 示例中似乎是这样。我希望在调用 testFn.then 时也会记录 called when Promise Define 字符串。

最佳答案

new Promise() 构造函数采用一个立即调用的函数来提供 Promise 的初始值(通常是异步的)。

之后调用then()只会在准备好后消耗该值;它不会调用任何东西。

关于javascript - 在 Node REPL 中,Promise 中的副作用在定义函数时运行,而不是在调用函数时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645168/

相关文章:

node.js - 如何在 nodejs 中构建模型(ODM)以与 nedb 一起使用

javascript - 从已解决的 Promise 数组中获取值

javascript - 从同步 JS 函数返回 Promise

Angular 结合 2 个 promise 到 1 个 promise

javascript - 获取文本输入的值并将它们存储到数组中

javascript - Javascript中实例的调用函数

javascript - 为什么在检索日期选择器值时我的函数会阻止检索其他值?

javascript - 向我的向导步骤 Jquery 代码添加第三步

node.js - 如何根据配置更改库路径?

node.js - 配置 Dockerfile 以设置 AWS 配置