第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在函數(shù)中拒絕不返回錯誤

在函數(shù)中拒絕不返回錯誤

梵蒂岡之花 2021-12-02 17:03:21
在這個挑戰(zhàn)中,使用 Javascript Promises 來計算各種幾何形狀的面積。形狀有正方形、長方形、圓形和三角形,每個形狀的面積都可以使用以下公式計算:邊'a'的正方形:面積=a2長'l'寬'w'的矩形:面積= wx lCircle of radius 'r': 面積 = Pi x r2 底邊 'b' 和高度 'h' 的三角形:面積 = 0.5 xbx h 注意:確保使用 Pi 的值為 3.14 并將所有形狀的面積四舍五入到小數(shù)點后兩位。函數(shù)描述完成函數(shù)getAreas,它接受一個形狀數(shù)組及其各自的邊,并返回一個代表所有形狀的區(qū)域數(shù)組的promise。另外,完成輔助函數(shù)calculateArea,它采用單個形狀及其邊/邊,并返回一個代表其面積的promise。getAreas 返回的promise 的規(guī)范如下:該promise 合并了calculateArea 返回的所有promise 的輸出形狀。由calculateArea返回的promise的規(guī)范如下:如果傳遞給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)    })}以上是我嘗試過的,但是當(dāng)出現(xiàn)奇怪的形狀 tp [-1] 時,它不會拒絕areas_array
查看完整描述

1 回答

?
茅侃侃

TA貢獻1842條經(jīng)驗 獲得超21個贊

resolve(areas_array)將把承諾解析為一個空數(shù)組,因為還沒有then執(zhí)行任何回調(diào)。


所以首先生成一個 promise 數(shù)組(每一個都是通過調(diào)用 獲得的calculateArea),然后調(diào)用Promise.all:


let getAreas = (shapes, values_arr) => {

    return Promise.all(shapes.map((shape, i) => calculateArea(shape, values_arr[i])))

        .catch(() => [-1]);

}

您應(yīng)該在這個級別下決心[-1],而不是在calculateArea. 在那里你可以使用reject()和傳遞你喜歡的任何東西。它沒有被使用。


旁注:當(dāng)你有一個(或多個)承諾時,就像你從調(diào)用中得到的一樣calculateArea,沒有必要創(chuàng)建另一個new Promise依賴于這些承諾的承諾。這樣做是一種反模式


演示:


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);


還有一個注意術(shù)語:我更改了代碼中的注釋,因為說Promise 在成功時返回某些內(nèi)容是一種誤導(dǎo):promise 不是函數(shù),因此它不返回任何內(nèi)容。你可以說它解決了某些事情。


查看完整回答
反對 回復(fù) 2021-12-02
  • 1 回答
  • 0 關(guān)注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號