错误
软件开发中的错误是在执行程序或应用程序期间发生的不希望或意外事件。在软件开发中,错误是每个开发人员的噩梦,也是人们放弃软件开发的原因之一。
错误类型
它们是与软件开发相关的多种类型的错误,但最主要类型的错误是
-
操作错误
-
功能错误
操作错误
软件开发中的操作错误是指由于未手动异常或其他代码问题而导致的运行时错误或程序遇到。随着内存泄漏,无限循环,不正确的系统配置或这些问题的组合可能是造成操作错误的原因,这些错误可能会挑战。
功能错误
功能错误是指在应用代码中阻止程序或应用程序执行预期执行的错误。这些类型的错误通常需要比操作错误更多的努力来识别。功能误差的主要原因是逻辑不正确,用例滥用,语法不正确,错别字和配置错误。
错误处理
错误处理是从执行程序或应用程序执行过程中识别,响应和恢复错误的过程。开发人员处理应用程序错误的方式对开发人员说了很多。好的开发人员必须是一个很好的错误处理程序。
错误处理技术
错误处理技术是开发人员在处理错误中使用的方法。处理各种错误的技术在很大程度上取决于您正在编写的编程类型和用例。对于电子商务网站,安全应用程序的错误技术可能不会相同。它们是各种错误处理技术,其中包括
- 尝试,捕捉并最终阻止
- 呼叫回复功能
- 承诺
- 异步和等待
- 事件发射器。
尝试,捕捉并最终阻止
。
Try
,Catch
和Finally
块是用于错误处理的编程结构。该结构分为三个块。
尝试块: try
块用于包围一个代码,该代码可能在执行过程中丢失错误。这样做的目的是try
代码并捕获代码中可能出现的任何错误。执行try
块后,JavaScript运行时会尝试按顺序执行块内的每个语句。如果执行任何语句期间发生错误,则将控制立即转移到可以处理发生错误类型的最近的catch
块中。如果找不到匹配的catch
块,则将错误从try
块中丢弃,并被任何封闭的catch
块捕获,或者如果找不到封闭的catch
块,则该程序崩溃了。
catch块: catch
块是try
块之后的下一个代码,catch
块用于处理可能被try
块丢弃的错误。 catch
块将错误作为参数,该参数包含有关try
块和catch
块内部丢弃的错误的信息,开发人员可以编写以受控且可预测的方式处理错误的代码,例如记录错误消息,消息,显示一条用户友好的错误消息或尝试从错误中恢复。
最后块: finally
块是在catch
块之后的可选块,该代码块用于实现该函数,无论是否丢弃了错误。 finally
块的主要目的是执行任何必要的清理任务,例如在try
块中获取的资源(例如文件手柄或网络连接)。这样可以确保即使发生错误也可以正确释放资源。
try {
client = await MongoClient.connect(uri);
// Insert the name into the collection
const result = await collection.create();
console.log('Name added to the database:', result.ops[0].name);
} catch (err) {
console.log('An error occurred while adding the name to the database:', err);
} finally {
// Close the database connection
client.close();
}
});
此代码是在Node.js中使用try-catch-Finally Block的一个示例,将名称添加到MongoDB数据库中。
try
块包含试图使用create
方法将新文档插入名称集合中的代码。 await
关键字用于使create
方法返回承诺,这使我们可以使用async/await
语法以同步样式处理异步操作。
如果在执行try
块期间发生错误,则错误对象被catch
块捕获,该块将错误消息记录到控制台。
最终块用于使用MongoClient
实例的关闭方法关闭MongoDB连接。这确保数据库连接始终是关闭的,无论操作是否成功。
通过使用finally
块来关闭数据库连接,我们确保应用程序本身可以正确清理并释放操作过程中分配的任何资源。这对于防止资源泄漏很重要,并确保我们的应用程序有效且可靠。
异步和等待
在JavaScript中,async
和await
关键字用于处理异步操作。 async
关键字用于定义返回承诺的异步函数。然后,可以将await
关键字用于该功能中,以等待异步函数的完成,然后再进入下一行代码。如果在执行await
语句期间发生错误,则会丢弃错误,并且控制将传递到最近的catch
块。
async function addNameToDatabase(collection, nameToAdd) {
let client;
try {
// Connect to the database
client = await MongoClient.connect(uri);
// Insert the name into the collection
const result = await collection.insertOne(nameToAdd);
console.log('Name added to the database:', result.ops[0].name);
} catch (err) {
console.error('An error occurred while adding the name to the database:', err);
} finally {
// Close the database connection
if (client) {
client.close();
}
}
}
在此代码中,我们定义了一个称为addNameToDatabase
的异步函数,该函数采用两个参数:集合对象和一个nameToAdd
字符串。在功能中,我们声明了一个名为客户端的变量来存储我们的数据库连接。
TRY块包含将nameToAdd
字符串插入集合对象的代码。我们正在使用等待的关键字等待insertOne
方法完成,然后再进入下一行代码。如果insertOne
方法引发了错误,则捕获块将捕获并将错误消息记录到控制台。
最后,我们有一个关闭数据库连接的finally
块。我们正在使用IF语句来检查客户端对象是否在调用关闭方法之前是否存在,以防在建立连接之前发生错误。
要使用此功能,您只需使用您的集合和nameToAdd
参数调用它:
const collection = db.collection('names');
const nameToAdd = 'John';
addNameToDatabase(collection, nameToAdd);
总而言之,我们将原始代码转换为一个异步函数,该函数使用等待的关键字来处理异步代码,并添加了错误处理,并最终阻止了一个块,以确保数据库连接正确关闭。
承诺
在错误处理中,通常将承诺用于处理异步操作(例如网络请求或数据库查询)期间发生的错误。成功解决承诺时,将调用其then()
方法,并且操作的结果将传递给程序的下一部分。如果操作期间发生错误,则拒绝承诺,并且错误将传递给Promise的catch()
方法,该方法可用于处理错误并防止程序崩溃。
function addNameToDatabase(collection, nameToAdd) {
return MongoClient.connect(uri)
.then((client) => {
// Insert the name into the collection
return collection.insertOne(nameToAdd)
.then((result) => {
console.log('Name added to the database:', result);
// Close the database connection
client.close();
})
.catch((err) => {
console.log('An error occurred while adding the name to the database:', err);
// Close the database connection
client.close();
throw err;
});
})
.catch((err) => {
console.log('An error occurred while connecting to the database:', err);
throw err;
});
}
这是如何使用承诺处理addNameToDatabase
函数中错误的示例
在此版本的函数中,我们将返回addNameToDatabase
的承诺,该函数在成功添加到数据库中时会解决,如果发生任何错误,则拒绝。我们还使用承诺来处理与数据库的连接以及数据库连接的关闭。
在MongoClient.connect(uri)
解决时,在当时的块中,我们返回了另一个诺言,该诺言在成功添加到数据库中时会解决,并在发生任何错误时拒绝。我们还使用一个捕获块来处理插入名称期间发生的任何错误,并确保在重新犯错之前关闭数据库连接。
最后,我们正在使用then
块外的另一个catch
块来处理与数据库连接期间发生的任何错误,并确保重新遇到错误,以便可以通过任何代码来处理该错误调用AddNametOdatabase。
良好的错误处理实践
- 识别潜在错误的来源。
- 预期可能的错误并采取措施防止它们。
- 提供清晰且内容丰富的错误消息,以帮助用户和开发人员了解出了什么问题以及如何解决问题。