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。