为了账号安全,请及时绑定邮箱和手机立即绑定

NodeJS 需要异步任务

NodeJS 需要异步任务

手掌心 2023-05-25 18:20:23
我正在尝试将 NodeJS require 语法与异步数据库查询一起使用。我希望程序在进入下一个要求之前等待查询完成,因为从数据库返回的一些信息作为参数传递给下一个要求。这是我的代码:const dealership = require('../models/getDealershipById.js')(id);const dealershipLeads = require('../models/getLeadsByDealershipId.js')(dealership.id);const dealershipStaff = require('../models/getStaffByDealershipId.js')(dealership.id);return [dealership, dealershipLeads, dealershipStaff];我曾尝试将其包装在匿名异步函数中,但这没有用。有谁知道如何做到这一点?这是我的模块代码:module.exports = function(id) {const pool = require('../loaders/pool.js')();  pool.query('SELECT * FROM dealerships WHERE id = \'' + id + '\';', (err, res)   => {    if(err) console.error(err.stack);    return res.rows[0];  });};
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

async据我了解,您已经使用and包装了导出的函数await:


module.exports = function(id) {

    return new Promise((resolve, reject) => {

        const pool = require('../loaders/pool.js')();


        pool.query(

            "SELECT * FROM dealerships WHERE id = '" + id + "';",

            (err, res) => {

                if (err) {

                    console.error(err.stack);

                    reject(err);

                }

                else {

                    resolve(res.rows[0]);

                }

            }

        );

    });

};

所以现在只需在调用代码中使用asyncand :await


async function getData() {

     const dealership = await require('../models/getDealershipById.js')(id);

     const dealershipLeads = await require('../models/getLeadsByDealershipId.js')(dealership.id);

     const dealershipStaff = await require('../models/getStaffByDealershipId.js')(dealership.id);

}


getData()

重要提示:作为旁注,请避免"SELECT * FROM dealerships WHERE id = '" + id + "';",因为这是一个真正糟糕的安全反模式,如果id未正确清理,它很容易允许 SQL 代码注入。pool.query("SELECT * FROM dealerships WHERE id = ?", [id], ...)如果您的驱动程序允许,请使用类似的东西,或者将其替换为允许的驱动程序或包装器。


查看完整回答
反对 回复 2023-05-25
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信