节点.js + 续集 + 查询执行
node.js + sequelize + query execution
在我的节点应用程序中,我正在使用续集ORM。在这种情况下,我必须执行 3 个查询,并且在所有查询都被执行后,我必须将这些结果合并为 JSON 格式。
我的查询:
try {
sequelize.query("select id_0, name_0, id_1, name_1 from xxxx group by id_0, name_0, id_1, name_1").success(function (result) {
finalResult = result;
})
} catch (err) {
}
try {
sequelize.query("select yyyyyyyyyy(JSON datatype) as value from xxxxx limit 1").success(function (valueResults) {
valueResults = valueResults[0].value;
valueResults = JSON.parse(valueResults);
for (var prop in valueResults) {
keyResult.push(prop);
}
})
} catch (err) {
}
try {
sequelize.query("select country_name, level0, level1, level2, level3, level4 from levels").success(function (result) {
//console.log("ccccccc=" +util.inspect(levelsResult)); = result;
levelsResult = result;
})
} catch (err) {
}
我必须将 3 个输出合并为单个输出,并且必须格式化为 JSON。 当我尝试打印这 3 个输出时,由于异步调用,它最终显示为空。请帮我解决这个问题。提前谢谢。
您可以使用流控制包来帮助解决此问题。有纯粹的JS方法可以做到这一点,但是像async或一些promise实现这样的包也可以工作(除非你想要练习)。
async
中的一个示例是async.series
或async.parallel
方法(不确定您的调用序列是否需要顺序或并行)。喜欢这个:
var async = require('async');
async.parallel({
query1 : function( cb ){
//perform query here. Put cb() inside callback, where you get results
cb(null, "result1");
},
query2 : function( cb ){
//perform query here. Put cb() inside callback, where you get results
cb(null, "result2");
},
query3 : function( cb ){
//perform query here. Put cb() inside callback, where you get results
cb(null, "result3");
}
},function parallelFinal(parallelErr, parallelResults){
if( parallelErr ) throw new Error("Something bad!");
console.log("Results are " + JSON.stringify( parallelResults ) );
});
结果:
结果为 {"query1":"result1","query2":"result2","query3":"result3"}
您可以根据需要在结果方法中设置和操作对象。
要么
按照@clay告诉你的解决方案,要么在查询回调中执行查询,也就是说:
var result1, result2, result3
try {
sequelize.query("select foo from bar").success(function (foo) {
result1 = foo;
try {
sequelize.query("select foo2 from bar2").success(function (bar) {
result2 = bar;
//do the 3rd query here
});
} catch (e) {
}
})
} catch (err) {
}
请记住,当您要执行多个查询时,此方法不实用,此方法是一个简单的阻塞代码,与node.js的工作方式相反(非阻塞)
相关文章:
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- 在node.js-mysql中执行UPDATE查询不起作用
- onchange选择get value并执行查询,然后在同一页面上显示结果
- AJAX 请求不会在 400 个错误查询上执行失败
- 关闭浏览器时使用 ajax 执行查询的解决方案
- 使用 Javascript 在 MongoDB 中使用希腊字符执行查询不会返回任何结果
- 节点JS-异步-响应是在执行查询时发送的
- NodeJS-如何通过执行查询获得mysql结果
- SSE和Ajax轮询在浏览器中执行查询而不是js代码的区别
- Sequelize——如何按顺序执行查询
- 在Symfony2中使用Typeahead + Bloodhound和FOSJsRoutingBundle执行查询
- 如何在jQuery成功的情况下执行查询?
- Javascript自执行查询函数
- Nodejs mysql无法执行查询
- 自动执行查询
- javascript承诺汇集连接并执行查询
- Websql 事务中的多个执行查询是否异步运行
- 我如何在猫鼬执行查询
- 对每个循环项执行查询并等待结果
- 在加载页面上执行查询