mysql - 将mysql集成到 waterfall 异步中

标签 mysql node.js waterfall

我需要保存到异步 waterfall 系列内的数据库。

我尝试在 clean 函数之后集成这两个函数

        function connectDb(next) {
                pool.getConnection(function(err, connection) {
                  if (err) console.log(err);
                    conn = connection;
                }, next);
            },
        function saveDb(next) {
                let sql = "UPDATE media SET media_url = ? WHERE media_url = ?";
                conn.query(sql, [dstKey, srcKey], function (error, results, fields) {
                    if (error) {
                        conn.release();
                        console.log(error);
                    }else{
                        console.log("media db updated");
                    }
                }, next)
            }

问题在于这两个函数会阻止代码执行。如何将其集成到下面的函数中?我尝试将函数包装在 Promise 中,但它也不起作用。



    async.waterfall([
        function download(next) {
            s3.getObject({
                    //param
                },
                next);
            },
        function transform(response, next) {
            resizeMedia(response.Body ).then( ( file ) => { next();} ).catch( (err) => { reject(err) } ); }
        },
        function upload(next) {
            var fileData = fs.createReadStream('/tmp/'+dstKey);

            if (isVideo ) { var ContentType = 'video/mp4' }
            if (isAudio ) { var ContentType = 'audio/mp3' }            

            s3.putObject({
                    //param
                },
                next);
            },            
        function clean(next) {
            // Stream the transformed image to a different S3 bucket.
            fs.unlinkSync('/tmp/'+dstKey);

            s3.deleteObject({
                    //param
                },
                next);

            }
        ], function (err) {
            if (err) {
                console.error('Error');
                callback(null, "Error");
                return;
            } else {
                console.log('Success');
                callback(null, "Done");
                return;
            }

            callback(null, "Done");
            return;
        }
    );

最佳答案

异步水流的目的是阻塞 waterfall ,直到调用回调为止。

附注通常您不应该每次都创建新的数据库连接。连接应该在应用程序启动时完成一次,并在需要时使用。

我强烈建议您使用knex.js相反,它默认返回 Promise,如果您想在异步 waterfall 中使用它(并等待解析),您可以调用 .asCallback

关于mysql - 将mysql集成到 waterfall 异步中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56689487/

相关文章:

node.js - 当我在node中使用phantomJS时,出现错误

node.js - 使用 expressjs 处理异步 waterfall 中的错误

Java/MySQL : Insert date gives "Unknown column ' date'"even though its there (Error 1054 (42s22))

MySQL如何将两个表中的值插入到一个表中

mysql - 保持动态数据库字段的最佳方式?

javascript - NodeJs,同步开发模式

javascript - 从flash接收数据并显示在angularJS客户端

javascript - 使用 Uint8ClampedArray 的 Node.js Canvas 实现

testing - 瀑布模型测试与敏捷相比有什么优点吗?

node.js - 查询数据库时的异步 waterfall 问题