这是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'resolve
或reject
的值?在这个REPL示例中似乎如此。我希望在调用called when promise defined
时也会记录testFn.then
字符串。
答案 0 :(得分:2)
new Promise()
构造函数接受一个立即调用 的函数来提供promise的初始值(通常是异步的)。
之后调用then()
只需在准备好后消耗该值;它不会调用任何东西。