Javascript 使用async/await进行sql数据插入
事情是这样的 我的梦想算法分为4个阶段Javascript 使用async/await进行sql数据插入,javascript,node.js,async-await,Javascript,Node.js,Async Await,事情是这样的 我的梦想算法分为4个阶段 递归扫描所有路径 将每个数据插入临时表 在主表上移动时态数据,无重复 当前主表 事情有秩序是很重要的。但是我不太明白asyncwait到底是什么…好吧,这是一个经过大量修改的代码清理版本 function Recursive_scan_and_Insert (path_dir) { //scanning path_dir recursively and insert filepath into temporary list Recursive_Sc
事情有秩序是很重要的。但是我不太明白async
wait
到底是什么…好吧,这是一个经过大量修改的代码清理版本
function Recursive_scan_and_Insert (path_dir) { //scanning path_dir recursively and insert filepath into temporary list
Recursive_Scan(path_dir, (err, files) => { //it's from npm recursive_readdir
if(err) {
console.log(err);
res.status(500).send('server error');
}
files.forEach(elements => {
let params = [elements]; //
DB("GET", "INSERT INTO filelist_t VALUES (null, ?, NOW(), 0, 0)", params).then(function(res) {
console.log('data input');
});
});
});
};
function Add_to_DB () { //moving temporal list to main list without duplicate
DB("GET", "INSERT INTO filelist (id, path, addeddate, isdeleted, ismodified) SELECT NULL, filelist_t.path, filelist_t.addeddate, filelist_t.isdeleted, filelist_t.ismodified FROM filelist_t LEFT JOIN filelist ON filelist.path = filelist_t.path WHERE filelist.id IS NULL; DELETE FROM filelist_t; ").then(function(res) {
console.log('data moving');
});
};
app.get('/db', (req, res) => { //PROBLEM PART
async function async_Two_Functions () {
var object_path = '/want/to/scan/path';
await Recursive_scan_and_Insert(object_path).then( () => {
return Add_to_DB()
})
}
async_Two_Functions();
res.send(res);
});
app.get('/dbp', (req, res) => { //show main list to my web
DB("GET", "SELECT * FROM filelist").then(function(res2) {
res.send(res2.row);
});
});
变化:
.then()
处理程序返回您希望为承诺解析的值Promise.all()
async/await
,尤其是当您想对多个异步操作进行排序时wait
周围使用try/catch
,以捕获被拒绝的承诺,这些承诺不会返回到更高的级别,从而被捕获.catch()
与任何未返回到更高级别的一起使用
app.get('/db',…)
发送什么响应。你得把它填上递归\u扫描\u和\u插入()
中得到任何解析值Add_to_DB()
真的不接受任何输入吗?它只是重新组织数据库中已有的内容这是一个经过清理的代码版本,有很多改动
function Recursive_scan_and_Insert (path_dir) { //scanning path_dir recursively and insert filepath into temporary list
Recursive_Scan(path_dir, (err, files) => { //it's from npm recursive_readdir
if(err) {
console.log(err);
res.status(500).send('server error');
}
files.forEach(elements => {
let params = [elements]; //
DB("GET", "INSERT INTO filelist_t VALUES (null, ?, NOW(), 0, 0)", params).then(function(res) {
console.log('data input');
});
});
});
};
function Add_to_DB () { //moving temporal list to main list without duplicate
DB("GET", "INSERT INTO filelist (id, path, addeddate, isdeleted, ismodified) SELECT NULL, filelist_t.path, filelist_t.addeddate, filelist_t.isdeleted, filelist_t.ismodified FROM filelist_t LEFT JOIN filelist ON filelist.path = filelist_t.path WHERE filelist.id IS NULL; DELETE FROM filelist_t; ").then(function(res) {
console.log('data moving');
});
};
app.get('/db', (req, res) => { //PROBLEM PART
async function async_Two_Functions () {
var object_path = '/want/to/scan/path';
await Recursive_scan_and_Insert(object_path).then( () => {
return Add_to_DB()
})
}
async_Two_Functions();
res.send(res);
});
app.get('/dbp', (req, res) => { //show main list to my web
DB("GET", "SELECT * FROM filelist").then(function(res2) {
res.send(res2.row);
});
});
变化:
.then()
处理程序返回您希望为承诺解析的值Promise.all()
async/await
,尤其是当您想对多个异步操作进行排序时wait
周围使用try/catch
,以捕获被拒绝的承诺,这些承诺不会返回到更高的级别,从而被捕获.catch()
与任何未返回到更高级别的一起使用
app.get('/db',…)
发送什么响应。你得把它填上递归\u扫描\u和\u插入()
中得到任何解析值Add_to_DB()
真的不接受任何输入吗?它只是重新组织数据库中已有的内容你可以找到一个非常好的概述。详细描述了它的工作原理。您的问题是什么?你的代码哪一部分需要帮助?@jfriend00哦,我错了。很明显,
app.get('/db',..
不是异步工作的。你可以找到一个非常好的概述。它是如何工作的详细描述。你的问题是什么?你需要帮助代码的哪一部分?@jfriend00哦,我的错误。很明显,app.get(“/db',…
不是异步工作的。非常感谢您的详细回答。我想在这里回答您的问题。3.将_添加到_db
看起来很长,但它只是作为“发送查询”函数的角色。所以实际上,它没有必要。但我不知道如何异步“发送查询”还有其他函数。所以我结束了。2.递归扫描和插入()
没有返回。因为它是为一个按钮而存在的。非常感谢您的详细回答。我想在这里回答您的问题。3.添加到\u DB
看起来很长,但它只是作为“发送查询”的角色函数。所以实际上,它不是必需的。但我不知道如何与其他函数异步“发送查询”。所以我结束了。2.递归扫描和插入()
没有返回。因为它是为按钮而存在的。