在node.js中运行多个MSSQL查询
Run multiple MSSQL queries in node.js
我正在尝试运行多个SQL查询。
问题是,由于node.js的使用,变量不断超出作用域。我正在努力找出如何在c#中做类似于await
关键字的事情。
这是我的破碎的代码,因为是;这应该更清楚地说明我想要达到的目标:
function getTopicsForMessages(request, results)
{
//Get topics for this message
var queryString = "SELECT ripple_messenger.TopicTypes.name, ripple_messenger.TopicTypes.imageUri";
queryString += " FROM ripple_messenger.MessageTopics JOIN ripple_messenger.TopicTypes";
queryString += " ON (ripple_messenger.MessageTopics.topicId = ripple_messenger.TopicTypes.id)";
queryString += " WHERE messageId = ?";
for (var i = 0; i < results.length; i++)
{
mssql.query(queryString, [results[i].id],
{
success: function (topicsResults)
{
results[i].topics = topicsResults;
},
error: function (err) {
console.error("SQL Read error: " + err);
request.respond(statusCodes.INTERNAL_SERVER_ERROR, "SQL Query failed on read");
}
});
}
//Continue... once all queries have executed successfully.
}
我认为这只是一个不太了解节点做事方式的问题。
我读过关于Node.js的一些包/选项,它们允许类似于await关键字的东西,但我不确定我是否能够使用它们,因为我正在使用Azure移动服务。
我也确信我可以在某种程度上做这个查询更好的SQL。但是,我也不太确定怎么做。
提前感谢,
丹尼下面的代码显示了一种可能的实现。由于node.js中的所有DB调用都是异步的,如果您将它们运行到"常规"for循环中,您将同时发送所有调用到DB,这可能会触发一些配额。下面的代码一次发送一个查询(等到一个调用完成后再调用下一个)。你也可以并行发送一些查询(使用类似于这篇文章中展示的批处理技术)。
function getTopicsForMessages(request, results)
{
//Get topics for this message
var queryString = "SELECT ripple_messenger.TopicTypes.name, ripple_messenger.TopicTypes.imageUri";
queryString += " FROM ripple_messenger.MessageTopics JOIN ripple_messenger.TopicTypes";
queryString += " ON (ripple_messenger.MessageTopics.topicId = ripple_messenger.TopicTypes.id)";
queryString += " WHERE messageId = ?";
var queryNextItem = function(i) {
if (i >= results.length) {
// All done
continuation();
} else {
mssql.query(queryString, [results[i].id],
{
success: function (topicsResults)
{
results[i].topics = topicsResults;
queryNextItem(i + 1);
},
error: function (err) {
console.error("SQL Read error: " + err);
request.respond(statusCodes.INTERNAL_SERVER_ERROR, "SQL Query failed on read");
}
});
}
}
queryNextItem(0);
function continuation() {
//Continue... once all queries have executed successfully.
}
}
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- j查询utc offSets的时差
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何处理node.js节点mongodb中的连接和查询队列
- 如何从 HTML 查询中删除项目
- 从查询字符串参数推断出正确的数据类型
- 将curl查询转换为jQuery.ajax()
- 触发媒体查询断点时刷新页面
- 使用DynamoDB查询返回
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- 如何将PHP get查询转换为Meteor's HTTP.get()
- AngularJS:获取链接中没有哈希的查询字符串值
- 捕获初始RedQueryBuilder查询中的SQL问题
- AngularJS,如何更改查询字符串
- 具有大型几何图形的基于沙发的空间查询
- 在php中提交数据时,如果某些值为null,而某些值为非null,如何进行查询
- 如何在mssql查询中使用JavaScript变量
- 在node.js中运行多个MSSQL查询
- Azure Easy API JavaScript:如何从MSSQL查询返回多个结果集
- 如何使页面上的Javascript可以使用MSSQL查询数据,而无需再次查询数据库