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

时间:2016-06-05 18:08:56

标签: javascript node.js promise

这是Promise的行为,我没想到。

我正在接受承诺的异步性,并为控制流创建了一系列承诺。但是,我担心我的控制流程的同步性没有得到尊重。

在下面的例子中,当Promise 定义时,似乎正在调用Promise的副作用,而不是在它运行时。通过“副作用”,我在这个例子中特别指代console.log,但在我的应用程序中,我也在我的Promise解析器中进行了一些全局配置。

在此示例中,我正在使用nodejs运行v5.11.2 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

在调用函数之前是否计算了promises'resolvereject的值?在这个REPL示例中似乎如此。我希望在调用called when promise defined时也会记录testFn.then字符串。

1 个答案:

答案 0 :(得分:2)

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

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