JavaScript 如何评估此布尔转换以达到预期输出?

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

const toBool = [() => true, () => false]

上面的行在这个 MDN 指南中用于(看似)将 Node 的

fs.promises.access
方法的输出评估为布尔值。

相关代码片段如下,摘自 MDN 示例

const toBool = [() => true, () => false];

const prepareFile = async (url) => {
  ...
  const exists = await fs.promises.access(filePath).then(...toBool);
  ... 
};

代码按预期工作;我希望得到关于编译器如何评估这些行的解释,因为我无法完全理解它。

据我所知,当

fs.promises.access
返回
undefined
时(根据访问方法的 Node 文档,成功解决),
exists
设置为
true
,而返回
 Error
对象将
exists
设置为 false。

有人可以解释一下上面代码片段中的

true
是如何计算这条线的吗?
    

javascript node.js boolean logic evaluation
1个回答
0
投票
exists

方法返回一个 Promise,当可访问性检查成功时,该 Promise 会解析;当可访问性检查失败时,该 Promise 会被拒绝。

access()

方法返回第二个promise。它可以接受两个参数:第一个是当第一个 Promise

resolves
时执行的回调,第二个是当第一个 Promise rejects 时执行的回调。 第二个 Promise 如何解析取决于相关回调返回(或抛出)的内容。

现在看您的具体代码。请注意

then

如何使用

扩展语法
then(...toBool) 调用提供两个参数。归根结底是这样做:
then

如果第一个 Promise 解析(即可访问性检查成功),则执行第一个函数,忽略参数,并使第二个 Promise 满足值 
then(() => true, () => false);

。另一方面,如果第一个承诺拒绝(即可访问性检查不成功),则这些回调的

第二个
将执行,忽略(错误)参数,并使第二个承诺履行值true

false

运算符确保当第二个承诺履行时,将该值(

await
false
)分配给
true
我希望这能澄清这一点。

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