这是我没有预料到的 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 的 resolve
或 reject
值是在调用函数之前计算的吗?在这个 REPL 示例中似乎是这样。我希望在调用 testFn.then
时也会记录 called when Promise Define
字符串。
最佳答案
new Promise()
构造函数采用一个立即调用的函数来提供 Promise 的初始值(通常是异步的)。
之后调用then()
只会在准备好后消耗该值;它不会调用任何东西。
关于javascript - 在 Node REPL 中,Promise 中的副作用在定义函数时运行,而不是在调用函数时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645168/