【发布时间】:2020-09-10 22:25:29
【问题描述】:
我正在尝试找到一种方法来获取需要参数的函数,而无需实际调用该函数。
当前损坏的代码示例:
const _validations = {
userID: (req) => check('userID').isString().isUUID('4').run(req),
};
async function (req, res, next) {
const allReqFields = { ...req.body, ...req.params, ...req.query };
const fieldsFound = [];
for (let key of Object.keys(allReqFields)) {
if (_.has(_validations, key)) {
fieldsFound.push(_validations[key](req));
}
}
await Promise.all(fieldsFound);
return next();
},
function (req, res, next) {
const errors = validationResult(req);
if (errors.isEmpty()) {
//ALWAYS HITS HERE
return next();
}else{}
}
有效但我不想要的代码示例:
const _validations = {
userID: (req) => check('userID').isString().isUUID('4').run(req),
};
async function (req, res, next) {
const allReqFields = { ...req.body, ...req.params, ...req.query };
for (let key of Object.keys(allReqFields)) {
if (_.has(_validations, key)) {
await _validations[key](req);
}
}
return next();
},
function (req, res, next) {
const errors = validationResult(req);
if (errors.isEmpty()) {
//Correctly hits here
return next();
}else{
//Correctly hits here
}
}
在某些情况下:
函数(req) => check('userID').isString().isUUID('4').run(req),返回一个promise。
_validations 对象内将会有更多的键/值。
_validations 中的每个函数都需要将 req 传递给它。
最终目标是运行所有这些异步函数,同时将 req 传递给它们。
我现在遇到的问题是fieldsFound.push(_validations[key](req)); 正在推动一个承诺,而不是我稍后调用的函数。这意味着fieldsFound 是一组未解决的承诺
有什么想法吗?谢谢!
【问题讨论】:
-
我真的不明白你在做什么。你能解释一下“最终目标是运行所有这些异步函数,同时将 req 传递给它们。”换个说法?
-
@SteveBennett 我继续添加我遇到的问题。这有帮助吗?
-
为什么不
fieldsFound.push(_validations[key])?
标签: javascript node.js asynchronous promise async-await