我想遞歸調用AWS的SNS listEndpointsByPlatformApplication。如果還有更多要返回(如:AWS SNS listEndpointsByPlatformApplication),則返回前100個端點,然後返回NextToken
中的令牌。遞歸調用異步函數,返回一個承諾
這是我已經試過:
var getEndpoints = function(platformARN, token) {
return new models.sequelize.Promise(function(resolve, reject) {
var params = {
PlatformApplicationArn: platformARNDev
};
if (token != null) {
params['NextToken'] = token;
}
sns.listEndpointsByPlatformApplication(params, function(err, data) {
if (err) {
return reject(err);
}
else {
endpoints = endpoints.concat(data.Endpoints); //save to global var
if ('NextToken' in data) {
//call recursively
return getEndpoints(platformARN, data.NextToken);
}
else {
console.log('trying to break out!');
return resolve(true);
}
}
});
});
}
我與調用它:
getEndpoints(platformARNDev, null)
.then(function(ret) {
console.log('HERE!');
}, function(err) {
console.log(err);
});
問題是:在第一次調用發生,那麼遞歸調用發生了,我得到的消息trying to break out!
,但HERE!
永遠不會被調用。我想我的承諾如何迴歸,我有些不妥。
感謝指點。
行 - 看起來很有希望 - 會試一試。 – CharlesA
太好了 - 那是一種享受 - thx – CharlesA