javascript - Mysql Node.js 异步,等待查询完成

标签 javascript mysql node.js async-await async.js

一直在尝试一切让它工作,特别是异步每个方法。 for (resultsHistory 的 const 元素) 也不起作用。

我试图通过运行 foreach 并执行 mysql 查询来修改先前查询的结果数组。

但是这需要等待查询完成。

有没有一种方法可以访问这些结果,而无需我手动放置以等待查询完成的 setTimeout(function() { } ?

        function getUserLikes(params, callback) {
            var usersArrayCat = [];
            console.log(`length of array ${params.length}`)
                                // 1 here means 1 request at a time
            async.eachLimit(params, 1, function (element, cb) {
                element.liked = 0;
                var queryLiked = `SELECT * from users_likes WHERE user_id = \"${req.body.userid}\" AND product_id = \"${element.product_id}\"`;
                connectionPromise.query(queryLiked, function (err, result) {
                    if (!result) {
                    } else if (result.length == 0) {

                    } else {
                        element.liked = result[0].userlike;

                        usersArrayCat.push(element);
                      //  console.log(usersArrayCat);
                        cb();
                    }
                })
            }, function (err) {
                if (err) return callback(err);
                callback(null, usersArrayCat)
            });
        };

    getUserLikes(resultsHistory, function (e) {
    console.log(e);
       });     



        if(!res.headersSent) {

            setTimeout(function() {  

            res.send(JSON.stringify({"status": 200 ,"error": null, "top3":resultsHistory}));
            }, 150);


        }

最佳答案

设法让它像这样工作,但仍然不确定这是否是正确的方法。

async function getUserLikes(resultsHistory) {
    for (const element of resultsHistory) {
        element.liked = 0;
        let queryLiked = `SELECT * from users_likes WHERE user_id = \"${req.body.userid}\" AND product_id = \"${element.product_id}\"`;
        let liked = await conn2.query(queryLiked);

        if (liked[0]) {
            element.liked = liked[0].userlike;
        }        
    }
    if(!res.headersSent) {
        conn2.release();     
        let newres = resultsHistory.sort(
            firstBy(function (v1, v2) { return v2.rating - v1.rating; })
             .thenBy(function (v1, v2) { return v2.dranktimes - v1.dranktimes; })
        ).filter( function(history) {             
            return history.event === eventName;
        }).slice(0, 3);

       res.send({"status": 200 ,"error": null, "top3":newres});       
    }
}

getUserLikes(resultsHistory);

关于javascript - Mysql Node.js 异步,等待查询完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53144458/

相关文章:

mysql - 查询COST到底是什么?成本是指什么?

node.js - 谷歌数据存储前提条件失败,带有时间戳

javascript - ReactJS - 无限循环,setState onChange 方法

javascript - 如何从 JavaScript 数组项的开头删除 "undefined"?

javascript - 改进自定义正则表达式

php - laravel : SQLSTATE[HY000] [2002] No such file or directory, 中的错误套接字文件的路径不起作用

mysql - sql 修改具有特定值的查询以返回,就像针对各种特定值执行一样

javascript - RxJS mixLatest 仅向一个可观察对象添加计时器

node.js - 尝试将 LowDB 与现有 db.json 集成

node.js - 使用 Sublime Text 2 : process. env undefined 进行 Grunt 构建