Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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_Postgresql - Fatal编程技术网

Javascript 如何在一个承诺中进行多个查询

Javascript 如何在一个承诺中进行多个查询,javascript,node.js,postgresql,Javascript,Node.js,Postgresql,我使用React使用NodeJS将数据发送到我的PotgreSQL数据库。数据在第一次插入和第二次插入时都插入得很好,但我唯一的问题是在上。然后在第二次插入后,它没有给我响应 const addData = (request, response) => { const uuid = uuidv4(); db.pool.query('INSERT INTO albums (title, date, description, id) VALUES ($1, $2, $3, $4) ON C

我使用React使用NodeJS将数据发送到我的PotgreSQL数据库。数据在第一次插入和第二次插入时都插入得很好,但我唯一的问题是在上。然后在第二次插入后,它没有给我响应

const addData = (request, response) => {
const uuid = uuidv4(); 

db.pool.query('INSERT INTO albums (title, date, description, id) VALUES ($1, $2, $3, $4) ON CONFLICT (id) DO NOTHING RETURNING *' , [request.body.title, request.body.date, request.body.description, uuid])
    .then(res => {
      console.log('INSERT ' + JSON.stringify(res.rows[0]));
    }).then(() => {
       for (let i = 0; i < request.body.files.length; i++) {
        db.pool.query('INSERT INTO songs (id, name, link, index) VALUES ($1, $2, $3, $4) ON CONFLICT (album_id, index) DO NOTHING RETURNING *', [uuidv4(), request.body.files[i].name, request.body.files[i].link, request.body.files[i].index])
        }}).then(res => {
      console.log('INSERT INTO songs ' + JSON.stringify(res));
    }).catch(error => console.log(error));

}
我没有得到第二次插入的响应有什么错?

Tl;博士 这将使您的代码正常工作:

const addData=请求,响应=>{ 常数uuid=uuidv4; db.pool.query“插入相册标题、日期、说明,冲突id上的id值$1、$2、$3、$4不做任何返回*”,[request.body.title,request.body.date,request.body.description,uuid] .thenres=>{ log'INSERT'+JSON.stringifyres.rows[0]; }.然后=>{ 常量dbQueryPromises=[]; 对于let i=0;i{ log“第二次插入的插入结果数组:”,res; }.catcherror=>console.logerror; } 更长的解释: 您在第二次插入时没有得到响应是因为您没有将任何承诺返回到输出。第一种方法之所以有效,是因为db.pool.query所做的是返回函数调用的Promise.resolves。但是,第二次插入不会返回任何内容

请看一下代码的这一部分:

=> { 对于let i=0;i这是一个箭头函数,在javascript中,如果您不返回任何内容,如果您只是给出null值


除此之外,您实际上一次创建了多个承诺,我建议您使用'Promise.all,如果您希望等待所有承诺都生效。

您需要在中返回一个承诺。然后=>{…@JaromandaX好的。那会是什么样子?首先有一个return语句-但对于其中的多个查询来说并不是那么简单-可能需要一个.mapif request.body.files是一个数组,那么使用数组映射方法可以使这段代码简单得多