Javascript全局变量未在回调中修改

时间:2014-05-02 01:09:58

标签: javascript amazon-web-services

我试图遍历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>

1 个答案:

答案 0 :(得分:1)

您的数据从Amazon异步返回,因此在您调用这些控制台日志时尚未定义这些变量。在变量赋值之后将控制台日志放在回调中。