我有一个异步的数据库查询(函数),因此我需要使用回调函数(没问题)。但是,在 Node.js 中,我需要在同一个 POST 函数中进行两个单独的查询。两者都是异步的,因此我在如何继续执行 POST 方面遇到了麻烦。
目标:
- 验证表单条目是否存在错误等。
- 保存前检查数据库中是否存在用户名(必须是唯一的)
- 保存前检查数据库中是否存在电子邮件(必须是唯一的)
- 如果一切正常,则保存用户,否则抛出一些错误
通常情况下,我会有这样的东西(过于简单化):
postSearch = function(req, res, next) {
var searchCallback = function(err, results) {
// Do stuff with the results (render page, console log, whatever)
}
// This is the db query - async. Passes search results to callback
defaultSearch(input, searchCallback);
}
其中只有一个异步查询,因此只有一个回调。通常我只会获取数据库结果并渲染页面。现在我必须验证一些表单数据,因此我的 POST 函数如下所示:
postUser = function(req, res, next) {
// Some static form validation (works, no issues)
var usernameExistsCallback = function(err, exists) {
// Does the username exist? True/false
}
// DB query - passes true or false to the callback
usernameExists(username, usernameExistsCallback);
var emailExistsCallback = function(err, exists) {
// Does the email exist? True/false
}
// DB query - passes true or false to the callback
emailExists(email, emailExistsCallback);
// Check if ALL validation constraints check out, implement error logic
}
node-postgres模块是异步的,因此查询需要回调(如果我想返回任何值,否则我可以只运行查询并断开连接)。我执行这两个查询都没有问题。我可以在回调中 console.log()
得到正确的结果。但现在我不知道如何在我的 postUser
函数中访问这些结果。
我已经阅读了有关异步 JavaScript 函数的所有内容,但我已经在这个问题上摸不着头脑了三个小时,现在正在尝试一些荒谬的事情(例如设置全局变量 [哦天哪!])没有效果。
我需要的这两个查询的结果只是true
或false
。如何组织此代码以便能够在 postUser
函数中使用这些结果?在我看来,我需要类似第三次回调的东西,但我不知道如何实现类似的东西。我有必要开始使用 async ?这是个好主意吗?到目前为止,这个应用程序中没有什么是 super 复杂的,我希望保持较低的依赖性<->这是有道理的。
最佳答案
这个怎么样:
postUser = function(req, res, next) {
// Some static form validation (works, no issues)
var emailExistsCallback = function(err, exists) {
// Does the email exist? True/false
var usernameExistsCallback = function(err, exists) {
// Does the username exist? True/false
// DO STUFF HERE
}
// DB query - passes true or false to the callback
usernameExists(username, usernameExistsCallback);
}
// DB query - passes true or false to the callback
emailExists(email, emailExistsCallback);
// Check if ALL validation constraints check out, implement error logic
}
关于javascript - JavaScript 中的两个异步函数 (Node.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24415064/