gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:01:35 25 4
gpt4 key购买 nike

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

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

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

在这个例子中,我正在运行一个 nodejs REPL,v5.11.2 是一个相对较新的版本。

> 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 时被记录。

最佳答案

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com