如何将一个函数结果传递给Node.js中的另一个函数

时间:2019-01-04 07:58:05

标签: node.js

我具有在其中创建功能;我正在通过调用另一个辅助函数来检查它是否已创建,但是我无法返回该辅助函数的结果。如果我做了,我只能得到未定义的。

这是我的功能:

//controller / form.js;
exports.createFormsElement = (req, res) => {
  console.log("Post a Elements: " + JSON.stringify(req.body));
  formById = formsHelper.formById("1");
  console.log("formById" + formById);
  res.send({ result: formById ? formById : "empty" });
  return;
};

//helper/forms.js 
module.exports = {
    formById: function(idForms) {
        Forms.findOne({
            where: {
                idForms: idForms
            },
            attributes: ['idForms']
        }).then(data => {
            return data;
        });
    }
}

2 个答案:

答案 0 :(得分:0)

您的代码存在的问题是您有一个异步操作,即数据库调用。在您的函数中,您期望同步的返回值无法正常工作,因为您需要等待I / O完成。解决方案是

//controller / form.js;
exports.createFormsElement = async (req, res) => {
  console.log("Post a Elements: " + JSON.stringify(req.body));
  const formById = await formsHelper.formById("1");
  console.log("formById" + formById);
  res.send({ result: formById ? formById : "empty" });
};

//helper/forms.js 
module.exports = {
    formById: function(idForms) {
        return Forms.findOne({
            where: {
                idForms: idForms
            },
            attributes: ['idForms']
        })
    }
}

请注意,helper / forms.js和controller / form.js都进行了更改,但是,更高版本的节点7.6或更高版本本身支持异步,或者您可能必须使用转译器或回调。

答案 1 :(得分:-1)

尝试一下:

function fOne () {
  return 'test'; // "return" passes the function result to the calling function
}

function fTwo() {
  console.log(fOne());
}