【发布时间】:2017-02-25 16:20:45
【问题描述】:
我的问题涉及到异步代码的使用。
这是相关的伪代码:
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() 来处理每个额外的记录块。
最初我在 where (!result.done){} 循环中有一个 conn.query(),但当然问题是 conn.query() 代码异步运行并且在下一次循环运行之前没有机会完成(导致〜无限的无目的循环)。
有 3rd 方库方法可以让代码同步运行,但我的猜测是我没有遵循一些基本的设计范例。递归有效,但我担心如果查询返回大量记录可能需要的内存量。
即使我知道需要分页的记录数,我也必须使用 result.nextRecordsUrl 进行分页,在执行之前的每个查询之前我无法获得...所以我不能只运行它们都在同一时间。
有人愿意参与进来吗?
谢谢!
【问题讨论】:
标签: node.js asynchronous