gpt4 book ai didi

mysql - 将mysql集成到 waterfall 异步中

转载 作者:行者123 更新时间:2023-11-29 15:52:37 25 4
gpt4 key购买 nike

我需要保存到异步 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com