在嵌套范围内向数组添加元素

时间:2015-10-31 18:06:08

标签: javascript arrays scope

我感觉很愚蠢,但我不知道这里有什么问题

var images = [];

angular.forEach($scope.flow.images.files, function (flowFile, i) {
    var fileReader = new FileReader();
    fileReader.onload = function (event) {
        var uri = event.target.result;
        images.push(uri);
        console.log(images.length); // First iteration length = 1, second iteration length = 2 
    };

    console.log(images.length); // Always shows 0
    fileReader.readAsDataURL(flowFile.file);

});

任何人都可以帮助我理解吗?

1 个答案:

答案 0 :(得分:0)

这与JavaScript的异步特性有关。 images.length的日志在fileReader.onload函数被触发之前发生 ,尽管它之后是顺序发生的,因此images数组的内容存在差异。

要规避此行为并avoid callback hell,请在JavaScript中查看此tutorial on Promises