为什么 Promise 将解析函数视为返回 false 值?

问题描述 投票:0回答:1

以下代码

new Promise((resolve) => {
    const v = resolve("called resolve()");
    if (!v) {
        console.log("resolve() returned a falsey value");
    }
}).then((value) => {
    console.log(value);
    return true;
});

输出

resolve() returned a falsey value
called resolve()

为什么即使通过

.then()
提供的解析函数明确返回
true
,Promise 函数体中的 if 语句仍然被执行?

而且if语句明明写在resolve函数调用之后,为什么它在发现resolve函数实际返回什么之前就被执行了?

javascript promise
1个回答
0
投票

它就是这样设计的。 resolve 函数的目的是将 Promise 的状态设置为已解决,仅此而已。不需要返回值,因为没有任何信息可以提供给您。如果您关心解决方法(在您的情况下,

"called resolve()"
),您可以将其保存在变量中并使用它。

const value = "called resolve()"
resolve(value);
if (!value) {
  // ...
}

为什么即使通过 .then() 提供的解析函数明确返回 true,Promise 函数体中的 if 语句也会被执行?

resolve 函数只处理这个 Promise;由

new Promise
创建的那个。它对其他承诺一无所知,例如通过在此承诺上调用
.then
创建的承诺。即使它确实知道其他承诺,它现在也需要返回一个值,而其他承诺尚未解决。

© www.soinside.com 2019 - 2024. All rights reserved.