gpt4 book ai didi

javascript - 使用 promises 递归检索分页数据

转载 作者:搜寻专家 更新时间:2023-11-01 00:23:09 28 4
gpt4 key购买 nike

我正在使用一个以分页形式返回数据的函数。因此它将返回最多 100 个项目和一个检索下 100 个项目的键。我想检索所有可用的项目。

我如何递归地实现这一点?递归在这里是一个不错的选择吗?我可以不用递归的任何其他方式吗?

我使用 Bluebird 3x 作为 promises 库。

这是我想要实现的目标的一个片段:

getEndpoints(null, platformApplication)
.then(function(allEndpoints) {
// process on allEndpoints
});


function getEndpoints(nextToken, platformApplication) {
var params = {
PlatformApplicationArn: platformApplication
};

if (nextToken) {
params.NextToken = nextToken;
}

return sns.listEndpointsByPlatformApplicationAsync(params)
.then(function(data) {
if (data.NextToken) {
// There is more data available that I want to retrieve.
// But the problem here is that getEndpoints return a promise
// and not the array. How do I chain this here so that
// in the end I get an array of all the endpoints concatenated.
var moreEndpoints = getEndpoints(data.NextToken, platformApplication);
moreEndpoints.push.apply(data.Endpoints, moreEndpoints);
}

return data.Endpoints;
});
}

但问题是,如果有更多数据要检索(参见 if (data.NextToken) { ... }),我如何将 promise 链接起来,以便最后我得到所有端点的列表等。

最佳答案

递归可能是获取所有端点的最简单方法。

function getAllEndpoints(platformApplication) {
return getEndpoints(null, platformApplication);
}

function getEndpoints(nextToken, platformApplication, endpoints = []) {
var params = {
PlatformApplicationArn: platformApplication
};

if (nextToken) {
params.NextToken = nextToken;
}

return sns.listEndpointsByPlatformApplicationAsync(params)
.then(function(data) {
endpoints.push.apply(endpoints, data.Endpoints);
if (data.NextToken) {
return getEndpoints(data.NextToken, platformApplication, endpoints);
} else {
return endpoints;
}
});
}

关于javascript - 使用 promises 递归检索分页数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35139145/

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