gpt4 book ai didi

javascript - 在 node.js 中运行多个 MSSQL 查询

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:20 26 4
gpt4 key购买 nike

我正在尝试运行多个 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 做事方式的问题。

我已经阅读了 Node.js 的一些包/选项,它们允许类似于 wait 关键字的操作,但我不确定我是否能够在使用 Azure 移动服务时使用它们。

我也确信我可以用 SQL 更好地执行此查询。但同样,我不太确定如何。

提前非常感谢,

丹尼

最佳答案

下面的代码显示了一种可能的实现。由于 Node.js 中的所有数据库调用都是异步的,因此如果将它们运行到“常规”for 循环中,您将同时向数据库发送所有调用,这可能会触发一些配额。下面的代码一次发送一个查询(等待一个调用完成后再调用下一个调用)。您还可以并行发送一些查询(使用类似于 this post 中所示的批处理技术)。

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.
}
}

关于javascript - 在 node.js 中运行多个 MSSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944584/

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