我试图遍历S3存储桶中的每1000个元素。这是因为get请求返回的最大值为1000个元素。如果有超过1000个元素,它将被分页,并且get请求返回一个字段调用IsTruncated为true,以及一个标记(NextMarker)元素传递给下一个调用,让下一个get请求从接下来的1000个元素开始
我将get请求中的数据作为回调函数中的参数获取,并尝试将上述两条信息存储在全局变量中,以便在外部循环中使用。但是,外部循环变为无穷大,因为全局变量永远不会在我的get请求回调函数中被修改。我尝试在回调中使用window.variable无济于事。任何人都可以帮我重构这段代码以实现我的目标吗?
由于
为了调试目的,注释掉了Outter循环。我用过很多调试console.log语句来确定问题的根源。
<script type="text/javascript">
s3_bucket = "link_to_s3_bucket";
var go = true;
var marker = "";
//while(go){
console.log('pass');
console.log(s3_bucket + marker);
$.get(
s3_bucket+marker,
"{}",
function(data) {
$(data).find('Key').each(function(i, key) {
key = key.innerHTML;
$("<a />", {
href : s3_bucket+key,
text : key
}).prependTo("#links");
$("<br />").prependTo("#links");
});
window.go = $(data).find('IsTruncated')[0].innerHTML;
window.marker = "&marker=" + $(data).find('NextMarker')[0].innerHTML;
},
"xml"
);
//}
console.log(go);
console.log(marker);
</script>
答案 0 :(得分:1)
您的数据从Amazon异步返回,因此在您调用这些控制台日志时尚未定义这些变量。在变量赋值之后将控制台日志放在回调中。