Javascript 带有node.js和pg promise的简单检查功能
我正试图在下面编写一个简单的Javascript 带有node.js和pg promise的简单检查功能,javascript,node.js,pg-promise,Javascript,Node.js,Pg Promise,我正试图在下面编写一个简单的check()函数。函数成功打印出“True!”,但当我执行console.log(submitModels.verifyOrganizationString(formInputs.organizationString))时,函数的返回值是undefined。如何使函数返回true和false 现在,即使字符串有效,函数也只返回“无效的组织字符串” 我认为这个结果与pgpromise库有关,但我不确定 在文件submit.js中,我有: function verify
check()
函数。函数成功打印出“True!”,但当我执行console.log(submitModels.verifyOrganizationString(formInputs.organizationString))时,函数的返回值是undefined
代码>。如何使函数返回true
和false
现在,即使字符串有效,函数也只返回“无效的组织字符串”
我认为这个结果与pgpromise
库有关,但我不确定
在文件submit.js
中,我有:
function verifyOrganizationString(organizationString) {
db.one("select * from organizations where organization_string=$1", [organizationString])
.then(data => {
console.log("True!");
return true;
})
.catch(error => {
console.log("False!");
return false;
});
}
module.exports = {
verifyOrganizationString,
};
在另一个文件中,我有
const submitModels = require('../models/submit.js');
function proccessSubmission(req, res) {
var formInputs = req.body;
console.log(submitModels.verifyOrganizationString(formInputs.organizationString));
if (submitModels.verifyOrganizationString(formInputs.organizationString)) {
submitModels.insertIntoDatabase(formInputs);
res.redirect('/');
} else {
res.send("Invalid organization string");
}
}
未定义的原因是“verifyOrganizationString”实际上不返回任何内容。您需要返回由db.one chain创建的承诺
尽管在这种情况下,该方法仍然不会返回true或false,但布尔值会被包装在另一个承诺中,这样您就可以像处理db.one的结果一样链接verify函数的结果 未定义的原因是“verifyOrganizationString”实际上不返回任何内容。您需要返回由db.one chain创建的承诺
尽管在这种情况下,该方法仍然不会返回true或false,但布尔值会被包装在另一个承诺中,这样您就可以像处理db.one的结果一样链接verify函数的结果 你的问题是由于无效使用承诺和错误使用承诺造成的
如果希望函数根据是否找到记录返回true
/false
,请将函数更改为:
function verifyOrganizationString(organizationString) {
return db.oneOrNone("select * from organizations where organization_string = $1",
organizationString, a => !!a);
}
然后你可以用它作为一个常规的承诺:
verifyOrganizationString('bla-bla')
.then(data => {
// data = true/false
})
.catch(error => {
// error
});
另请参阅:示例。您的问题是由于无效使用承诺和错误使用承诺造成的
如果希望函数根据是否找到记录返回true
/false
,请将函数更改为:
function verifyOrganizationString(organizationString) {
return db.oneOrNone("select * from organizations where organization_string = $1",
organizationString, a => !!a);
}
然后你可以用它作为一个常规的承诺:
verifyOrganizationString('bla-bla')
.then(data => {
// data = true/false
})
.catch(error => {
// error
});
另请参阅:示例。更好的方法是?@cpage这与您的坏代码无关;)你的问题是你滥用承诺。您需要学习如何正确使用承诺。更好的方法是?@cpage这与您的坏代码无关;)你的问题是你滥用承诺。你需要学习如何正确地使用承诺。你需要明确你对承诺的概念,因为你在非法使用承诺,这是一种反模式。请记住一件事,从中的任何一个返回的值。然后
或。catch
只能由下一个链接的访问。然后
或。catch
这是因为返回的值实际上是一个承诺。可能重复的值需要清除关于承诺的概念,因为您正在非法使用承诺反模式的。请记住一件事,从中任何一个返回的值。然后或。catch
只能由下一个链接的访问。然后或。catch
这是因为返回的值实际上是一个承诺。您能否详细说明a=>的内容!!a
正在做什么?@cpage。你能详细说明一下a=>!!一个
正在做什么?@cpage。