本文将介绍如何使用 Promise 在 JavaScript 计算器类中实现异步计算功能。我们将分析现有代码的问题,并提供一个简洁、高效的解决方案,确保计算在成功时返回结果,并在出现错误时拒绝 Promise 并返回 NaN。
原代码中的 calculate 函数存在以下几个主要问题:
s。以下是一个使用 async/await 简化 Promise 处理的 calculate 函数实现:
class Calculator{
constructor(){
this[Symbol.toStringTag] = 'Calculator';
}
add(a, b) {
return a + b;
}
subtract(a, b) {
return a - b;
}
multiply(a, b) {
return a * b;
}
divide(a, b) {
if(b === 0){
return NaN;
}
return a / b;
}
toString(){
return "Calculator";
}
async calculate(f) {
try {
return f.call(this);
} catch {
throw NaN;
}
}
}代码解释:
const calculator = new Calculator();
calculator.calculate(function() {
return this.add(1, 2) + this.multiply(3, 4);
})
.then(result => {
console.log("计算结果:", result); // 输出:计算结果: 15
})
.catch(error => {
console.error("计算出错:", error);
});
calculator.calculate() // 传入undefined,会报错
.then(result => {
console.log("计算结果:", result);
})
.catch(error => {
console.error("计算出错:", error); // 输出:计算出错: NaN
});通过使用 async/await 和 try...catch 块,我们可以简洁、高效地实现计算器类中的异步计算功能。 这种方法不仅代码可读性高,而且能够正确处理计算过程中可能发生的错误,确保 Promise 在成功时返回结果,并在出现错误时拒绝 Promise 并返回 NaN。