【发布时间】:2020-05-27 01:43:11
【问题描述】:
我知道这里有人问过这类问题,并且在发布这个问题之前我已经进行了广泛的研究。
我有七个操作需要按顺序运行。大多数都与数据库相关,因此可能需要一些时间才能完成。
getLiveItems => puppeteer 页面(平均 10 秒)
getOldItems => mySQL 查询
getNewItems => mySQL 查询
compareItems => lodash 比较
saveOldItems => mySQL 插入查询
saveNewItems => mySQL 插入查询
notifyUser => puppeteer 打开页面
我知道我需要使用回调或承诺。但我什至无法使用任何一种方法完成前两个操作。
这是我最近的尝试。
var oldItems, newItems;
var getoldItems = async function(callback) {
await connection.query('SELECT * FROM items', function(err, rows) {
if (err) {
throw err;
} else
callback(null, rows);
});
}
var getnewItems = async function(callback) {
await connection.query('SELECT * FROM newItems', function(err, rows) {
if (err) {
throw err;
} else
callback(null, rows);
});
}
const init = async function(){
await getoldItems(function(err, content) {
if(err){
console.log(err);
} else {
oldItems = content;
return oldItems;
}
})
await getnewItems(function(err, content) {
if(err){
// console.log(err);
} else {
newItems = content;
return newItems;
}
})
return;
}
( async function() {
await init();
console.log(oldItems);
console.log(newItems);
});
我没有输出。也没有错误。
我真的很困惑。我已经阅读并阅读了有关此主题的内容,但是我缺少一些基本的东西。
这就是我的思想处理我的脚本的方式,因此我这样写它的原因......
我将等待 init 函数的结果,它执行 下面...
我将等待 getOldItems 的结果,然后继续 等待getNewItems的结果。然后,我要回去了 返回 Init 并控制台输出这两个结果。
我错过了什么?!
提前谢谢你。
在佛罗里达感到沮丧, 约翰
【问题讨论】:
-
您使用的是回调,而不是 Promise,因此您的 await 实际上并没有在那里做任何事情。我只是在这里猜测,您使用的是 mysql npm 包吗?你有几个选择:切换到所有回调,用 Promises 包装你的回调,使用原生支持 Promises 的数据库库
-
是的,我正在使用 mysql 包。如果我使用承诺,尽管对我来说是新闻,哈哈,我需要在某个地方解决一些问题,不是吗?
-
这就是我要找的! MySql2.感谢您的建议。如果您可以发布作为答案,我会接受,因为这解决了我的问题。
标签: javascript node.js asynchronous async-await