gpt4 book ai didi

javascript - 在函数中拒绝不返回错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:34 25 4
gpt4 key购买 nike

在这个挑战中,使用 Javascript Promises 计算各种几何形状的面积。形状有正方形、长方形、圆形和三 Angular 形,每个的面积都可以使用以下公式计算: 边 'a' 的正方形:面积 = a2 长 'l' 和宽 'w' 的矩形: 面积 = wx l 半径的圆'r':面积 = Pi x r2底边'b'和高度'h'的三 Angular 形:面积 = 0.5 xbx h注意:确保使用 Pi 的值为 3.14,并将所有形状的面积四舍五入到小数点后 2 位。

函数描述完成函数 getAreas,它接受一个形状数组及其各自的边,并返回一个代表所有形状区域数组的 promise。另外,完成辅助函数calculateArea,它采用单个形状及其边/边,并返回一个表示其面积的promise。getAreas返回的promise的规范如下:这个Promise合并了calculateArea返回的所有promise的输出形状。
calculateArea 返回的 Promise 的规范如下:如果传递给 Promise 的 shape 有效,则用各自 shape 的计算面积解析。如果传递给 Promise 的 shape 无效,则用 [-1] 拒绝所有内容.

 It returns a Promise which on success, returns area of the shape, and on failure returns [-1].

let calculateArea = (shape, values) => {

return new Promise((resolve, reject) => {
switch(shape) {
case 'square':
resolve(values[0]*values[0]);
break;
case 'rectangle':

resolve(values[0] * values[1]);
break;
case 'circle':
resolve(values[0]*values[0] * 3.14);
break;
case 'triangle':
resolve(0.5 * values[0]*values[1]);
break;
default:
reject( [-1]);
}
})
}

// Complete the generateArea function below.
// It returns a Promise which on success, returns an array of areas of all the shapes and on failure, returns [-1].
let getAreas = (shapes, values_arr) => {
return new Promise((resolve, reject) => {
let areas_array = [];
for(let i= 0; i < shapes.length; i++) {
calculateArea(shapes[i], values_arr[i])
.then(area => {
areas_array.push(area);
})
.catch(error => {
console.log(error)
})
}
resolve(areas_array)

})
}

以上是我尝试过的,但是当出现奇怪的形状时它不会拒绝 area_array tp [-1]

最佳答案

resolve(areas_array)将把 promise 解析为一个空数组,因为 then 中没有一个。回调已经执行。

所以首先生成一个promise数组(每个promise都是通过调用calculateArea得到的),然后调用Promise.all :

let getAreas = (shapes, values_arr) => {
return Promise.all(shapes.map((shape, i) => calculateArea(shape, values_arr[i])))
.catch(() => [-1]);
}

在这个级别,您应该解析为 [-1] ,不在 calculateArea 中.在那里你可以使用 reject()并传递任何你喜欢的东西。它不被使用。

附注:当您有一个(或多个) promise 时,就像您通过调用 calculateArea 获得的一样,无需使用 new Promise 创建另一个 promise 这依赖于那些。这样做是一个 anti-pattern

演示:

let calculateArea = (shape, values) => {
return new Promise((resolve, reject) => {
switch(shape) {
case 'square':
resolve(values[0]*values[0]);
break;
case 'rectangle':
resolve(values[0] * values[1]);
break;
case 'circle':
resolve(values[0]*values[0] * 3.14);
break;
case 'triangle':
resolve(0.5 * values[0]*values[1]);
break;
default:
reject();
}
});
}

// Complete the generateArea function below.
// It returns a Promise which on success,
// resolves to an array of areas of all the shapes and on failure, resolves to [-1].
let getAreas = (shapes, values_arr) => {
return Promise.all(shapes.map((shape, i) => calculateArea(shape, values_arr[i])))
.catch(() => [-1]);
}

getAreas(['square', 'circle'], [[10], [5]]).then(console.log);


还有一个注意术语:我更改了代码中的注释,因为说一个 promise 在成功时返回一些东西是一种误导:一个 promise 不是一个函数,所以它不返回任何东西。你可以说它解决了一些问题。

关于javascript - 在函数中拒绝不返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58546486/

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