以下代码
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函数实际返回什么之前就被执行了?
它就是这样设计的。 resolve 函数的目的是将 Promise 的状态设置为已解决,仅此而已。不需要返回值,因为没有任何信息可以提供给您。如果您关心解决方法(在您的情况下,
"called resolve()"
),您可以将其保存在变量中并使用它。
const value = "called resolve()"
resolve(value);
if (!value) {
// ...
}
为什么即使通过 .then() 提供的解析函数明确返回 true,Promise 函数体中的 if 语句也会被执行?
resolve 函数只处理这个 Promise;由
new Promise
创建的那个。它对其他承诺一无所知,例如通过在此承诺上调用 .then
创建的承诺。即使它确实知道其他承诺,它现在也需要返回一个值,而其他承诺尚未解决。