Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点需要异步任务_Javascript_Node.js_Require - Fatal编程技术网

Javascript 节点需要异步任务

Javascript 节点需要异步任务,javascript,node.js,require,Javascript,Node.js,Require,我正在尝试将nodejsrequire语法用于异步数据库查询。我希望程序等待查询完成,然后再转到下一个require,因为从数据库返回的一些信息将作为参数传递给下一个require 这是我的密码: const dealership = require('../models/getDealershipById.js')(id); const dealershipLeads = require('../models/getLeadsByDealershipId.js')(dealership.id)

我正在尝试将nodejsrequire语法用于异步数据库查询。我希望程序等待查询完成,然后再转到下一个require,因为从数据库返回的一些信息将作为参数传递给下一个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];
  });
};

据我所知,您已使用
async
wait
包装了导出的函数:

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]);
                }
            }
        );
    });
};
现在只需在调用代码中使用
async
wait

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()

重要:作为旁注,请避免
从id=“+id+”;“
的经销商处选择*因为这是一个非常糟糕的安全反模式,如果
id
未正确消毒,则很容易允许SQL代码注入。如果您的驱动程序允许,可以使用类似于pool.query(“SELECT*FROM dealerships WHERE id=?”、[id]、…)的方法,或者使用驱动程序或包装器来替换它。

如果您的问题中只有一行代码,那么使用
async
关键字是没有意义的。只需返回
db.getCollection('foo').find({id}).toArray()
直接返回的承诺(假设它确实返回了承诺,否则无论如何都不会工作)。您是对的,但我假设所需的JS文件将比直接返回承诺有更多的处理。否则,只需返回原始承诺,并且不需要在所需模块中使用async/Wait。很抱歉,我应该指定,我正在使用回调(我已使用模块代码更新了问题)。你知道如何使用回调吗?是的,我刚刚编辑了我的答案以反映这一点。也请阅读最后的重要提示!