gpt4 book ai didi

mysql - 在aws serverless上与nodejs + mysql同步

转载 作者:行者123 更新时间:2023-11-29 10:12:33 25 4
gpt4 key购买 nike

我正在使用带有无服务器的nod​​ejs,尝试查询mysql

module.exports.message = (event, context, callback) => {
const { content } = event;

let search = new Shop();
console.log('start');
search._search(content, (data) => {
console.log(callback);
callback(null, data);
});
console.log('finish');
});

在商店类别中,

class Shop{
_search(text, unit = false, callback){
return this._morphs(text).then(function(data){
return data;
})
}
_morphs(text, callback){
return new Promise((resolve, reject) => {
let result = text.split(" ");
let query = `SELECT * from shop where name LIKE CONCAT('%', ?, '%')`;
console.log(1);
for(let i = 0; i < result.length; i++){
DB.query(query, result[i], function (data, error) {
console.log(2);
resolve(data);
});
}
});
}
}

当我执行此操作时,

开始1结束2回调

这就是我在日志上看到的内容。我想在完成之前执行回调。所以这段代码可以返回数据。

我正在使用下面的 mysql 模块。 https://www.npmjs.com/package/mysql

提前致谢!!

最佳答案

Javascript 默认是同步的,但是当您编写异步(回调/ promise /异步)代码时,您需要正确处理它。

您的代码中有两个问题

  1. module.exports.message = 函数 console.log('finish') 不会等待 search._search
  2. Db.query,每次迭代中的解决 promise 。

这应该有效=>

const { promisify } = require('util'); // Node >=8 or use blubird 

promise library promisify
const dbQueryPromise = promisify(DB.query)

class Shop{
_search(text, unit = false){
return this._morphs(text);
}
async _morphs(text){
const result = text.split(" ");
const query = `SELECT * from shop where name LIKE CONCAT('%', ?, '%')`;
console.log(1);

const queryResult = []
for(let i = 0; i < result.length; i++){
const data = await dbQueryPromise(query, result[i])
queryResult.push(data);
}
}
}


module.exports.message = (event, context, callback) => {
const { content } = event;

let search = new Shop();
console.log('start');
search._search(content)
.then((data) => {
console.log(callback);
callback(null, data)
})
.catch(err => {
console.log(callback);
callback(err);
})
.finally(() => {

console.log('finish');
})
});

关于mysql - 在aws serverless上与nodejs + mysql同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50708602/

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