gpt4 book ai didi

javascript - 在 Promise catch block 内解析

转载 作者:行者123 更新时间:2023-12-03 01:29:03 25 4
gpt4 key购买 nike

我在一些代码中发现了这一点。这样做有充分的理由吗?

}).catch(() => {
resolve();
});

我很好奇是否有任何可行的方法可以证明这是一件好事,但在本例中,我正在审查的代码是:

function checkExtendedPackage(config, packagePath) {
return new Promise((resolve, reject) => {
extend.check(packagePath)
.then(() => {
extend.validate(packagePath, config.allowExtends, config.scope)
.then(packageToExtend => {
showOutput.log([{
type: 'success',
description: 'validating',
message: packageToExtend
}]);
resolve();
}).catch(err => {
reject(err);
});
}).catch(() => {
resolve();
});
});
}

最佳答案

正如您似乎猜测的那样,这只是写得不好的代码。您最初指出的部分没有什么好处,它确实是 explicit promise construction antipattern 的一个例子。它似乎是由一个不太了解如何使用 Promise 的人写的。

可以这样改进:

function checkExtendedPackage(config, packagePath) {
return extend.check(packagePath)
.then(() => extend.validate(packagePath, config.allowExtends, config.scope)
.then(packageToExtend => {
showOutput.log([{
type: 'success',
description: 'validating',
message: packageToExtend
}]);
})
, () => null);
}

与原始代码一样,此函数将返回一个 promise :

  • 如果 extend.check 拒绝,则不会拒绝(在这种情况下解析为 null)
  • 如果 extend.validate 拒绝(具有相同的错误),则将拒绝
  • 如果两者都成功,将使用必要的值执行 showOutput.log

为了减少嵌套和复杂性,我建议将其分为两个函数:

function validateAndLogExtendedPackage(config, packagePath) {
return extend.validate(packagePath, config.allowExtends, config.scope)
.then(packageToExtend => {
showOutput.log([{
type: 'success',
description: 'validating',
message: packageToExtend
}]);
});
}

function checkExtendedPackage(config, packagePath) {
return extend.check(packagePath)
.then(
() => validateAndLogExtendedPackage(config, packagePath),
() => null
);
}

关于javascript - 在 Promise catch block 内解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51381867/

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