gpt4 book ai didi

javascript - 在 Azure 移动服务上使用服务器端脚本修改响应

转载 作者:行者123 更新时间:2023-12-02 19:03:37 26 4
gpt4 key购买 nike

我有一个移动应用程序,我使用 Azure 移动服务作为后端。我有一个场景,我需要修改客户端从数据库请求的元素。我需要根据所请求的记录的最佳分数和表中所有其他记录的最佳分数来计算其排名和百分位。我关注了example here并编写了以下脚本:

function read(query, user, request) {
request.execute({
success: function(results) {
results.forEach(function(item) {
var totalsql = "SELECT COUNT(*) FROM scoreInfo";
mssql.query(totalsql, {
success: function(totalresults) {
var totalCount = totalresults[0].Column0;

var moresql = "SELECT COUNT(*) FROM scoreInfo WHERE bestscore > ?";
mssql.query(moresql, [item.bestscore], {
success: function(moreresults) {
var moreBestCount = moreresults[0].Column0;

item.bestrank = moreBestCount + 1;
item.bestpercentile = 100 - moreBestCount*100/(totalCount+1);
}
});
}
});
});
request.respond();
}
});
}

但我在客户端没有看到预期的结果。我什至尝试在服务器端记录结果,但我在客户端看到的结果与记录的内容不匹配。我做错了什么?

最佳答案

这里的问题是 mssql.query函数是异步的。最终发生的事情是在forEach中循环中,您将触发许多异步 mssql 请求,然后(无需等待它们完成)您将调用ng request.respond();此时您仍然没有任何响应(请记住,node.js 是单线程的,因此还没有任何响应到达)。

您需要做的是延迟调用 request.respond()直到对 mssql 调用的所有响应都到达。下面的代码展示了一种实现此目的的方法。

function read(query, user, request) {
request.execute({
success: function(results) {
var updateResult = function(index) {
if (index >= results.length) {
// all done
request.respond();
} else {
var item = results[index];
var totalsql = "SELECT COUNT(*) FROM scoreInfo";
mssql.query(totalsql, {
success: function(totalresults) {
var totalCount = totalresults[0].Column0;

var moresql = "SELECT COUNT(*) FROM scoreInfo WHERE bestscore > ?";
mssql.query(moresql, [item.bestscore], {
success: function(moreresults) {
var moreBestCount = moreresults[0].Column0;

item.bestrank = moreBestCount + 1;
item.bestpercentile = 100 - moreBestCount*100/(totalCount+1);

updateResult(index + 1); // update next result
}
});
}
});
}
}

updateResult(0);
}
});
}

关于javascript - 在 Azure 移动服务上使用服务器端脚本修改响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14542418/

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