gpt4 book ai didi

node.js - 试图了解 node.js 编程模型的工作原理

转载 作者:搜寻专家 更新时间:2023-11-01 00:47:07 25 4
gpt4 key购买 nike

我最近一直在阅读有关 node.js 的内容(与许多其他人一样)。我发现某些用例很有趣,但有点难以理解内部工作原理,特别是闭包函数与代码流程之间的交互。

假设我有一个接受键值数组的函数。该函数必须在将数据存储在某处之前检查值是否遵循某些数据质量准则(例如,某些键必须有值,其他键必须有数字作为值等)(出于这个问题的目的,我们假设数据验证必须在应用程序本身中完成)。

在“常规”开发模型中,我会这样写:

resultName = validateName(data.name)
resultAddress = validateAddress(data.address)
resultID = validateID(data.id)

if (resultName && resultAddress && resultID) {
store(data)
else {
sendErrorToUser(data)
}

获取验证结果,向用户解释错误或存储数据并返回某种确认。流程非常清晰。

我理解 node.js 的方式是将验证委托(delegate)给不同的函数(以避免等待每个验证完成),并向验证 block 的函数提供两个回调函数数据: * 验证成功时调用的回调 * 验证失败时调用的回调

现在很容易通过“请稍候”消息返回给用户,但在存储数据或向用户解释问题之前,我必须等待所有验证都清除(或失败)。作为一种确定是否完成所有验证的简单方法,我想到了使用一个变量来计算调用回调的函数的数量,并发出一个“验证完成”事件来存储经过验证的数据(或返回给用户有任何错误)。或者,也可以在每次验证完成后发出一个事件,并在该事件的代码中检查是否所有验证都已完成,然后再发出“存储”/“错误”事件。

我的问题是——我是否正确处理了这个问题?或者是否有更合适的方法来使用 node.js(或类似的基于事件的系统)来完成这些事情。

谢谢!阿龙

最佳答案

您的验证是异步的吗?如果不是,您可以使用您发布的代码,即“常规”代码。

如果验证是异步的(例如检查电子邮件的唯一性),您需要提供回调:

var validateUniqueEmail = function (data, callback) {
db.find({email: data.email}, function (err, result) {
callback(err, result === null);
})
};

var validateAndStore = function (data, callback) {
asyncValidation(data, function (err, is_valid) {
if (err) {
callback(err, null);
} else if (!is_valid) {
callback('Email is not unique', null);
} else {
db.store(data, callback);
}
});
}

上面的代码可以通过使用一些已经存在的验证器或ORM模块来简化很多

示例:mongolia validator module .

关于node.js - 试图了解 node.js 编程模型的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5336670/

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