gpt4 book ai didi

javascript - Node.js 在 .then 链中重复数据库请求

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

我使用 Promise .then 链。在这个链中,我计算一些边界,构建 sql 语句并向数据库发送请求。如果数据库请求没有给出结果,我想通过计算边界来更改一些内容并再次执行相同的步骤。我想重复这个直到有数据库结果。

这是我的代码:

.then(function(){
return calcBound.calcBounds(req.body,0);
})
.then(function(options){
return sqlStatementBuilder.sqlStatementBuilder(options);
})
.then(function(statement){
return db_request.db_request(statement);
})
.then(function(dbResult){
if(dbResult.length <= 0){ // if there are no results from the database
console.log("There are no results for this filter options");
var newDBResult;
do{
newDBResult = calcBound.calcBounds(req.body, addToOffset)
.then(function(options){
return sqlStatementBuilder.sqlStatementBuilder(options);
})
.then(function(statement){
return db_request.db_request(statement);
})
} while(dbResult.length <= 0);
return newDBResult.sort(sortArray.compareRecordId);
}else{
return dbResult.sort(sortArray.compareRecordId);
}
})

while 循环不是一个好主意,因为这最终会导致“堆内存不足”。

什么是更好的解决方案?

最佳答案

创建一个以 addToOffset 作为参数的函数 dummyRecursiveFunction 并调用它,直到在 dbResult 中获得结果

function dummyRecursiveFunction(addToOffset) {
someFunction()
.then(function(){
return calcBound.calcBounds(req.body, addToOffset);
})
.then(function(options){
return sqlStatementBuilder.sqlStatementBuilder(options);
})
.then(function(statement){
return db_request.db_request(statement);
})
.then(function(dbResult) {
if(dbResult.length > 0) {
return dbResult.sort(sortArray.compareRecordId);
} else {
// newOffset: Your recalculated offset value.
dummyRecursiveFunction(newOffset);
}
});
}

关于javascript - Node.js 在 .then 链中重复数据库请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47265238/

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