|
|
ÑÝʾ try-catch-finally-throw Óï¾äµÄ¸´ÔÓÓ÷¨
- ////🍎½»Á÷QQȺ711841924Ⱥһ£¬Æ»¹ûÄÚ²âȺ£¬528816639
- // ÑÝʾ try-catch-finally-throw Óï¾äµÄ¸´ÔÓÓ÷¨
- printl("===== JavaScript ´íÎó´¦Àí×ÛºÏʾÀý¿ªÊ¼ =====");
- // Ä£ÄâÓû§Êý¾Ý
- var users = [
- { id: 1, name: "ÕÅÈý", age: 25, email: "zhangsan@example.com" },
- { id: 2, name: "ÀîËÄ", age: 30, email: "lisi@example.com" },
- { id: 3, name: "ÍõÎå", age: 28, email: "wangwu@example.com" }
- ];
- // Ä£Äâ²úÆ·Êý¾Ý
- var products = [
- { id: 101, name: "±Ê¼Ç±¾µçÄÔ", price: 5999, stock: 10 },
- { id: 102, name: "ÖÇÄÜÊÖ»ú", price: 3999, stock: 50 },
- { id: 103, name: "ƽ°åµçÄÔ", price: 2999, stock: 25 }
- ];
- // Ä£ÄâÊý¾Ý¿âÁ¬½Ó״̬
- var dbConnection = null;
- var transactionActive = false;
- // ×Ô¶¨Òå´íÎóÀàÐÍ
- function ValidationError(message) {
- this.name = "ValidationError";
- this.message = message;
- }
- function DatabaseError(message) {
- this.name = "DatabaseError";
- this.message = message;
- }
- function BusinessError(message) {
- this.name = "BusinessError";
- this.message = message;
- }
- // Ä£ÄâÊý¾Ý¿âÁ¬½Óº¯Êý
- function connectDatabase(config) {
- printl("³¢ÊÔÁ¬½ÓÊý¾Ý¿â...");
-
- // ÑéÖ¤ÅäÖòÎÊý
- if (!config) {
- throw new ValidationError("Êý¾Ý¿âÅäÖò»ÄÜΪ¿Õ");
- }
-
- if (!config.host) {
- throw new ValidationError("Êý¾Ý¿âÖ÷»úµØÖ·²»ÄÜΪ¿Õ");
- }
-
- if (!config.database) {
- throw new ValidationError("Êý¾Ý¿âÃû³Æ²»ÄÜΪ¿Õ");
- }
-
- // Ä£ÄâÊý¾Ý¿âÁ¬½Ó
- dbConnection = {
- host: config.host,
- database: config.database,
- connected: true,
- connectionTime: new Date().toISOString()
- };
-
- printl("✅ Êý¾Ý¿âÁ¬½Ó³É¹¦: " + dbConnection.host + "/" + dbConnection.database);
- return true;
- }
- // Ä£ÄâÊý¾Ý¿â²éѯº¯Êý
- function queryDatabase(sql) {
- if (!dbConnection || !dbConnection.connected) {
- throw new DatabaseError("Êý¾Ý¿âδÁ¬½Ó£¬ÎÞ·¨Ö´Ðвéѯ");
- }
-
- if (!sql || typeof sql !== 'string') {
- throw new ValidationError("SQLÓï¾ä±ØÐëΪ·Ç¿Õ×Ö·û´®");
- }
-
- // Ä£Äâ²éѯ½á¹û
- printl("Ö´ÐÐSQL²éѯ: " + sql);
- return { rows: [], affectedRows: 0 };
- }
- // Ä£ÄâÊÂÎñ¿ªÊ¼
- function beginTransaction() {
- if (!dbConnection) {
- throw new DatabaseError("Êý¾Ý¿âδÁ¬½Ó£¬ÎÞ·¨¿ªÊ¼ÊÂÎñ");
- }
-
- transactionActive = true;
- printl("✅ ÊÂÎñÒÑ¿ªÊ¼");
- return true;
- }
- // Ä£ÄâÊÂÎñÌá½»
- function commitTransaction() {
- if (!transactionActive) {
- throw new BusinessError("ûÓлîÔ¾µÄÊÂÎñ£¬ÎÞ·¨Ìá½»");
- }
-
- transactionActive = false;
- printl("✅ ÊÂÎñÒÑÌá½»");
- return true;
- }
- // Ä£ÄâÊÂÎñ»Ø¹ö
- function rollbackTransaction() {
- if (!transactionActive) {
- printl("⚠️ ûÓлîÔ¾µÄÊÂÎñ£¬ÎÞÐè»Ø¹ö");
- return false;
- }
-
- transactionActive = false;
- printl("✅ ÊÂÎñÒѻعö");
- return true;
- }
- // Ä£Äâ¹Ø±ÕÊý¾Ý¿âÁ¬½Ó
- function closeDatabaseConnection() {
- if (dbConnection) {
- printl("¹Ø±ÕÊý¾Ý¿âÁ¬½Ó: " + dbConnection.host + "/" + dbConnection.database);
- dbConnection = null;
- }
- transactionActive = false;
- printl("✅ Êý¾Ý¿âÁ¬½ÓÒѹرÕ");
- }
- // ÑéÖ¤Óû§ÊäÈë
- function validateUserInput(data) {
- if (!data) {
- throw new ValidationError("Óû§Êý¾Ý²»ÄÜΪ¿Õ");
- }
-
- if (!data.name || data.name.trim() === "") {
- throw new ValidationError("Óû§Ãû²»ÄÜΪ¿Õ");
- }
-
- if (data.name.length < 2 || data.name.length > 20) {
- throw new ValidationError("Óû§Ãû³¤¶È±ØÐëÔÚ2-20¸ö×Ö·ûÖ®¼ä");
- }
-
- if (!data.email || data.email.indexOf('@') === -1) {
- throw new ValidationError("ÓÊÏä¸ñʽ²»ÕýÈ·");
- }
-
- if (data.age !== undefined) {
- if (typeof data.age !== 'number' || data.age < 0 || data.age > 150) {
- throw new ValidationError("ÄêÁ䱨ÐëÊÇ0-150Ö®¼äµÄÊý×Ö");
- }
- }
-
- return true;
- }
- // ÑéÖ¤²úÆ·Êý¾Ý
- function validateProductData(product) {
- if (!product) {
- throw new ValidationError("²úÆ·Êý¾Ý²»ÄÜΪ¿Õ");
- }
-
- if (!product.name || product.name.trim() === "") {
- throw new ValidationError("²úÆ·Ãû³Æ²»ÄÜΪ¿Õ");
- }
-
- if (typeof product.price !== 'number' || product.price < 0) {
- throw new ValidationError("²úÆ·¼Û¸ñ±ØÐëΪ·Ç¸ºÊý");
- }
-
- if (typeof product.stock !== 'number' || product.stock < 0) {
- throw new ValidationError("²úÆ·¿â´æ±ØÐëΪ·Ç¸ºÊý");
- }
-
- return true;
- }
- // ´¦ÀíÓû§×¢²á£¨°üº¬ÍêÕû´íÎó´¦ÀíÁ÷³Ì£©
- function processUserRegistration(userData) {
- printl("========== ´¦ÀíÓû§×¢²á ==========");
- printl("Óû§Êý¾Ý: " + JSON.stringify(userData));
-
- var result = { success: false, message: "", userId: null };
-
- try {
- // ²½Öè1: ÑéÖ¤Óû§ÊäÈë
- printl("²½Öè1: ÑéÖ¤Óû§ÊäÈë");
- validateUserInput(userData);
- printl("✅ Óû§ÊäÈëÑé֤ͨ¹ý");
-
- // ²½Öè2: Á¬½ÓÊý¾Ý¿â
- printl("²½Öè2: Á¬½ÓÊý¾Ý¿â");
- connectDatabase({
- host: "localhost",
- database: "userdb",
- username: "admin"
- });
-
- // ²½Öè3: ¿ªÊ¼ÊÂÎñ
- printl("²½Öè3: ¿ªÊ¼ÊÂÎñ");
- beginTransaction();
-
- // ²½Öè4: ²åÈëÓû§Êý¾Ý
- printl("²½Öè4: ²åÈëÓû§Êý¾Ýµ½Êý¾Ý¿â");
- var sql = "INSERT INTO users (name, email, age) VALUES ('" +
- userData.name + "', '" + userData.email + "', " +
- (userData.age || 0) + ")";
- queryDatabase(sql);
-
- // ²½Öè5: Ä£ÄâÉú³ÉÓû§ID
- var newUserId = users.length + 1;
- printl("✅ ÐÂÓû§ID: " + newUserId);
-
- // ²½Öè6: Ìá½»ÊÂÎñ
- printl("²½Öè6: Ìá½»ÊÂÎñ");
- commitTransaction();
-
- result.success = true;
- result.message = "Óû§×¢²á³É¹¦";
- result.userId = newUserId;
-
- } catch (e) {
- printl("❌ ·¢Éú´íÎó: " + e.name + " - " + e.message);
-
- // ¼Ç¼´íÎóÈÕÖ¾
- result.message = e.name + ": " + e.message;
-
- // Èç¹ûÓлîÔ¾µÄÊÂÎñ£¬½øÐлعö
- if (transactionActive) {
- printl("Ö´ÐÐÊÂÎñ»Ø¹ö...");
- rollbackTransaction();
- }
-
- // ¸ù¾Ý´íÎóÀàÐͽøÐв»Í¬µÄ´¦Àí
- if (e instanceof ValidationError) {
- result.message = "Êý¾ÝÑé֤ʧ°Ü: " + e.message;
- } else if (e instanceof DatabaseError) {
- result.message = "Êý¾Ý¿â²Ù×÷ʧ°Ü: " + e.message;
- } else {
- result.message = "δ֪´íÎó: " + e.message;
- }
-
- } finally {
- printl("========== Ö´ÐÐÇåÀí²Ù×÷ ==========");
- // ÎÞÂ۳ɹ¦Óë·ñ£¬¶¼¹Ø±ÕÊý¾Ý¿âÁ¬½Ó
- closeDatabaseConnection();
- printl("✅ ×¢²áÁ÷³Ì´¦ÀíÍê³É");
- }
-
- printl("×¢²á½á¹û: " + JSON.stringify(result));
- return result;
- }
- // ´¦Àí²úÆ·´´½¨£¨ÑÝʾ²»Í¬µÄ´íÎ󳡾°£©
- function processProductCreation(productData) {
- printl("========== ´¦Àí²úÆ·´´½¨ ==========");
- printl("²úÆ·Êý¾Ý: " + JSON.stringify(productData));
-
- var result = { success: false, message: "" };
-
- try {
- // ÑéÖ¤²úÆ·Êý¾Ý
- printl("ÑéÖ¤²úÆ·Êý¾Ý");
- validateProductData(productData);
- printl("✅ ²úÆ·Êý¾ÝÑé֤ͨ¹ý");
-
- // Á¬½ÓÊý¾Ý¿â
- printl("Á¬½ÓÊý¾Ý¿â");
- connectDatabase({
- host: "localhost",
- database: "productdb"
- });
-
- // ¼ì²é¿â´æÊÇ·ñ×ã¹»
- if (productData.stock < 10) {
- throw new BusinessError("²úÆ·¿â´æ²»×㣬×îµÍÐèÒª10¼þ");
- }
-
- // Ö´ÐвúÆ·´´½¨Âß¼
- var newProductId = products.length + 101;
- products.push({
- id: newProductId,
- name: productData.name,
- price: productData.price,
- stock: productData.stock
- });
-
- printl("✅ ²úÆ·´´½¨³É¹¦£¬ID: " + newProductId);
- result.success = true;
- result.message = "²úÆ·´´½¨³É¹¦£¬ID: " + newProductId;
-
- } catch (e) {
- printl("❌ ·¢Éú´íÎó: " + e.message);
- result.message = e.message;
-
- // ÒµÎñÂß¼´íÎó²»Ò»¶¨»á»Ø¹öÊÂÎñ
- if (!(e instanceof BusinessError)) {
- rollbackTransaction();
- }
-
- } finally {
- printl("ÇåÀíÊý¾Ý¿âÁ¬½Ó");
- closeDatabaseConnection();
- }
-
- printl("´´½¨½á¹û: " + JSON.stringify(result));
- return result;
- }
- // ÑÝʾǶÌ×µÄtry-catch½á¹¹
- function complexCalculation(a, b, operation) {
- printl("========== ¸´ÔÓ¼ÆËãÑÝʾ ==========");
- printl("²ÎÊý: a=" + a + ", b=" + b + ", operation=" + operation);
-
- var result = { value: null, error: null };
-
- try {
- // Íâ²ãtry-catch´¦Àí²ÎÊýÑéÖ¤
- try {
- if (typeof a !== 'number' || typeof b !== 'number') {
- throw new ValidationError("²ÎÊý±ØÐëÊÇÊý×Ö");
- }
-
- if (a < 0 || b < 0) {
- throw new ValidationError("²ÎÊý²»ÄÜΪ¸ºÊý");
- }
-
- printl("²ÎÊýÑé֤ͨ¹ý");
-
- } catch (innerError) {
- printl("ÄÚ²ãÑéÖ¤´íÎó: " + innerError.message);
- // ÖØÐÂÅ׳ö´íÎó£¬ÔÚÍâ²ã´¦Àí
- throw innerError;
- }
-
- // Ö´ÐмÆËã
- switch (operation) {
- case 'add':
- result.value = a + b;
- break;
- case 'subtract':
- result.value = a - b;
- break;
- case 'multiply':
- result.value = a * b;
- break;
- case 'divide':
- if (b === 0) {
- throw new BusinessError("³ýÊý²»ÄÜΪÁã");
- }
- result.value = a / b;
- break;
- case 'power':
- if (b > 10) {
- throw new BusinessError("Ö¸Êý²»Äܳ¬¹ý10£¬ÒÔ·ÀÖ¹ÊýÖµÒç³ö");
- }
- result.value = Math.pow(a, b);
- break;
- default:
- throw new ValidationError("²»Ö§³ÖµÄÔËËã: " + operation);
- }
-
- printl("¼ÆËã½á¹û: " + result.value);
-
- } catch (e) {
- printl("❌ ¼ÆËã´íÎó: " + e.message);
- result.error = e.message;
- } finally {
- printl("✅ ¼ÆËãÁ÷³Ì½áÊø");
- }
-
- return result;
- }
- // Ö÷³ÌÐòÈë¿Ú
- function main() {
- printl("========================================");
- printl(" JavaScript ´íÎó´¦ÀíÖ÷³ÌÐò¿ªÊ¼ ");
- printl("========================================");
-
- var executionLog = [];
-
- // ²âÊÔ³¡¾°1: ³É¹¦µÄÓû§×¢²á
- executionLog.push("²âÊÔ³¡¾°1: ³É¹¦×¢²áÓû§");
- var user1 = { name: "ÕÔÁù", email: "zhaoliu@example.com", age: 35 };
- var regResult1 = processUserRegistration(user1);
- printl("×¢²á½á¹û: " + (regResult1.success ? "³É¹¦" : "ʧ°Ü") + " - " + regResult1.message);
-
- // ²âÊÔ³¡¾°2: ʧ°ÜµÄÓû§×¢²á£¨ÓÊÏä¸ñʽ´íÎó£©
- executionLog.push("²âÊÔ³¡¾°2: ÓÊÏä¸ñʽ´íÎó");
- var user2 = { name: "ËïÆß", email: "invalid-email", age: 40 };
- var regResult2 = processUserRegistration(user2);
- printl("×¢²á½á¹û: " + (regResult2.success ? "³É¹¦" : "ʧ°Ü") + " - " + regResult2.message);
-
- // ²âÊÔ³¡¾°3: ʧ°ÜµÄ²úÆ·´´½¨£¨¿â´æ²»×㣩
- executionLog.push("²âÊÔ³¡¾°3: ¿â´æ²»×ã");
- var product1 = { name: "ÖÇÄÜÊÖ±í", price: 1999, stock: 5 };
- var prodResult1 = processProductCreation(product1);
- printl("´´½¨½á¹û: " + (prodResult1.success ? "³É¹¦" : "ʧ°Ü") + " - " + prodResult1.message);
-
- // ²âÊÔ³¡¾°4: ³É¹¦µÄ²úÆ·´´½¨
- executionLog.push("²âÊÔ³¡¾°4: ³É¹¦´´½¨²úÆ·");
- var product2 = { name: "ÎÞÏß¶ú»ú", price: 599, stock: 100 };
- var prodResult2 = processProductCreation(product2);
- printl("´´½¨½á¹û: " + (prodResult2.success ? "³É¹¦" : "ʧ°Ü") + " - " + prodResult2.message);
-
- // ²âÊÔ³¡¾°5: ¸´ÔÓ¼ÆËã
- executionLog.push("²âÊÔ³¡¾°5: ¸´ÔÓ¼ÆËã");
- var calcResult1 = complexCalculation(5, 3, 'power');
- var calcResult2 = complexCalculation(10, 0, 'divide');
- var calcResult3 = complexCalculation(7, 2, 'multiply');
- var calcResult4 = complexCalculation(15, 11, 'power'); // Ö¸Êý³¬¹ý10
-
- // ²âÊÔ³¡¾°6: ÑéÖ¤´íÎó´«²¥
- executionLog.push("²âÊÔ³¡¾°6: ´íÎó´«²¥");
- try {
- try {
- throw new DatabaseError("Ä£ÄâÊý¾Ý¿âÁ¬½Óʧ°Ü");
- } catch (innerError) {
- printl("²¶»ñµ½ÄÚ²¿´íÎó: " + innerError.message);
- // Ìí¼Ó¶îÍâÐÅÏ¢ºóÖØÐÂÅ׳ö
- throw new DatabaseError(innerError.message + " (´íÎó´úÂë: DB_CONN_001)");
- }
- } catch (outerError) {
- printl("ÔÚÍâ²ã²¶»ñµ½´íÎó: " + outerError.message);
- printl("´íÎóÀàÐÍ: " + outerError.name);
- }
-
- // ×ܽá
- printl("========================================");
- printl(" Ö´ÐÐ×ܽá");
- printl("========================================");
- printl("×ܹ²Ö´ÐвâÊÔ³¡¾°: " + executionLog.length + " ¸ö");
- for (var i = 0; i < executionLog.length; i++) {
- printl(" " + (i + 1) + ". " + executionLog[i]);
- }
- printl("✅ ËùÓвâÊÔ³¡¾°Ö´ÐÐÍê±Ï");
- printl("========================================");
- }
- // Ö´ÐÐÖ÷³ÌÐò
- main();
- printl("===== JavaScript ´íÎó´¦Àí×ÛºÏʾÀý½áÊø =====");
¸´ÖÆ´úÂë
|
|