gpt4 book ai didi

node.js - 如何使用异步 Node.js 最好地处理此分页?

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

我的问题涉及异步代码的使用。

这是相关的伪代码:

function handleQueryMore(result) {
conn.queryMore(result.nextRecordsUrl, function(err, resultMore){
if (err) {}
//do stuff with result
if (!resultMore.done){
handleQueryMore(resultMore);
}
});
}

//(below code runs first when launched of course)

var conn = new jsforce.Connection({////etc
var sql = "SELECT //.......

conn.query(sql, function(err, result) {
if (err) {}
//do stuff with result

if (!result.done) //didn't pull all records
{
handleQueryMore(result);
}
});

初始查询仅返回一定的最大记录数,然后递归调用handleQueryMore()来处理每个额外的记录 block 。

最初,我在 where (!result.done){} 循环中只有一个 conn.query(),但问题当然是 conn.query() 代码异步运行,并且没有机会在下一次循环运行之前完成(导致无限无目的循环)。

有第三方库方法可以使代码同步运行,但我的猜测是,有一些我没有遵循的基本设计范例。递归有效,但我担心如果查询返回大量记录,可能需要大量内存。

即使我知道需要分页的记录数,我也必须有 result.nextRecordsUrl 来分页,直到执行之前的每个查询后我才能获得该结果...所以我不能同时运行它们。

有人愿意对此发表意见吗?

谢谢!

最佳答案

使用async.js包。

function handleQueryMore(result) {

conn.queryMore(result.nextRecordsUrl, function(err, resultMore) {
if (err) {}
//do stuff with result
else {
async.each(result.data, function(individualData, callback) {
// do some async task
callback(); // to tell that this is completed
//callback(err); if there is any error while processing data
}, function(error) {
if (!error) {
if (!result.done) //didn't pull all records
{
handleQueryMore(result);
}
}
});
}
});


}



var conn = new jsforce.Connection({ ////etc
var sql = "SELECT //.......

conn.query(sql, function(err, result) {
if (err) {} else {
async.each(result.data, function(individualData, callback) {
// do some async task
callback(); // to tell that this is completed
//callback(err); if there is any error while processing data
}, function(error) {
if (!error) {
if (!result.done) //didn't pull all records
{
handleQueryMore(result);
}
}
});
}
});
});

关于node.js - 如何使用异步 Node.js 最好地处理此分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42458487/

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