在 aws serverless 上与 nodejs + mysql 同步
Make synchronous with nodejs + mysql on aws serverless
我正在将 nodejs 与无服务器一起使用,尝试查询 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,
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个
回调
这是我在日志上的内容。我想在完成之前执行回调。所以这段代码可以return数据。
我正在使用以下 mysql 模块。
https://www.npmjs.com/package/mysql
提前致谢!!
Javascript默认是同步的,但是当你写异步(callback/promise/async)代码时你需要妥善处理。
在您的代码中,有 2 个问题
module.exports.message =
函数 console.log('finish') 不会等待 search._search
.
Db.query
,您在每次迭代中的解决承诺。
这应该有效 =>
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');
})
});
我正在将 nodejs 与无服务器一起使用,尝试查询 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,
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个 回调
这是我在日志上的内容。我想在完成之前执行回调。所以这段代码可以return数据。
我正在使用以下 mysql 模块。 https://www.npmjs.com/package/mysql
提前致谢!!
Javascript默认是同步的,但是当你写异步(callback/promise/async)代码时你需要妥善处理。
在您的代码中,有 2 个问题
module.exports.message =
函数 console.log('finish') 不会等待search._search
.Db.query
,您在每次迭代中的解决承诺。
这应该有效 =>
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');
})
});