gpt4 book ai didi

javascript - 我们如何将数据发送到 Node js中与数据库调用异步的局部变量

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:16 25 4
gpt4 key购买 nike

我是 javascript 异步编程的新手,我有一个基本问题,我有一组代码,我根据请求主体参数进行两个单独的数据库调用。这是两个执行数据库调用并返回 Promise 的方法

  1. 验证考试
  2. 验证用户是否存在

我想将异步调用的结果存储到此 myExam 变量,然后将其作为响应返回。

getExam: function(req, res) {
var myExam = {};
var coupon = req.body.coupon;
var email = req.body.email;


async.series([
function(callback) {
validateExam(coupon)
.then(function(success) {

callback(null, success);
});
},
function(callback) {
validateUserExists(email)
.then(function(result) {
callback(null, result);
})
}
], function(error, results) {
myExam.res = results;

});


res.json({
"status": 400,
"message": myExam
});
},

最佳答案

您无法从函数中返回异步检索的值。您的函数在异步操作完成之前返回。相反,您需要通过返回的 Promise 或传入可以在异步操作完成时调用的回调将返回值传达给调用者。有关详细信息,请参阅:How do I return the response from an asynchronous call? .

此外,使用异步库来管理两个 Promise 操作非常奇怪。 Promise 本身内置了所有工具来管理异步操作,因此如果您的核心操作已经返回 Promise,您应该直接使用这些 Promise,而不涉及异步库。

在查看您的代码时,验证考试和验证用户似乎是独立的操作,您可以并行运行它们并使用 Promise.all() 来了解两个 promise 何时生效完成。

你可以这样做:

getExam: function(req, res) {
var coupon = req.body.coupon;
var email = req.body.email;

Promise.all([validateExam(coupon), validateUserExists(email)]).then(function(results) {
// results is a two element array that contains the two validation results
// send your response here based on the results array (not clear to me exactly what you want here)
res.json(...);
}).catch(function(err) {
// return some sort of error response here
res.status(500).json(...);
});
},

关于javascript - 我们如何将数据发送到 Node js中与数据库调用异步的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44139726/

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