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

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

我得到承诺的asynchronous性质的吊and,并正在创造控制stream量的承诺序列。 但是,我担心我的控制stream的同步性没有得到尊重。

在下面的例子中,Promise的副作用看起来像在定义 Promise时被调用,而不是在运行时调用。 “副作用”,我特别指在这个例子中的console.log ,但在我的应用程序中,我也在我的Promiseparsing器中做了一些全局configuration。

在这个例子中,我正在运行一个相对最新版本的v5.11.2nodejs 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 

承诺是在调用函数之前计算出的resolve值还是reject值? 在这个REPL的例子中似乎是这样的。 我希望在called when promise defined testFn.then时候可以called when promise definedstring。

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

之后调用then() ,只要准备好就使用该值; 它不会调用任何东西。