gpt4 book ai didi

node.js - 如何使用 Node.js 的函数 promise (执行查询时的 CassandraDB 驱动程序)

转载 作者:搜寻专家 更新时间:2023-10-31 23:50:43 25 4
gpt4 key购买 nike

我使用 Cassandra DB 驱动程序中的 client.stream() 来使用页面获取大型结果集,然后对于返回的每一行结果,我将其插入在我的范围顶部定义的数组中。

查询完成后,我想返回我的数组,但它总是返回“undefined”,我猜是因为获取查询需要很长时间,所以 Javascript 在对象被填充之前继续执行 return 语句。

对于那些不熟悉这个驱动程序的人:client.stream 是一个函数,它需要一点时间来获取一些数据。在返回对象之前,我需要等待它完成!

例如

function foo() {
var resultArray: [];
var query = "select username from users where userRank = 3";
client.stream(query, {prepare: true})
.on('readable' function () {
var row;
while (row = this.read()) {
resultArray.push(row.username);
}
})
.on('end', function () {
return obj; // The object only exists in this scope but cant return from here
});
}

当我调用此 var returned = foo(); 时,我得到 undefined 作为返回值。

最佳答案

如果您想使用 stream API,您需要创建自己的 Promise 实例并在流结束时解析它。

自行缓冲所有行然后返回 Promise 是没有意义的,驱动程序可以为您完成。如果您不关心内存中所有这些行的内存消耗,您可以这样做:

// Disable paging
// NOTE: Memory consumption will depend on the amount of rows
// and the amount of concurrent requests
const options = { prepare: true, fetchSize: 0 };
const promise = client.execute(query, params, options);

有关详细信息,请参阅文档:https://docs.datastax.com/en/developer/nodejs-driver/latest/features/paging/

关于node.js - 如何使用 Node.js 的函数 promise (执行查询时的 CassandraDB 驱动程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50546637/

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