Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载多个图像后如何返回数组?_Javascript_Jquery_Onload - Fatal编程技术网

Javascript 加载多个图像后如何返回数组?

Javascript 加载多个图像后如何返回数组?,javascript,jquery,onload,Javascript,Jquery,Onload,我使用的应用程序对加载的图像进行了一些图像处理,如果出现某种情况,它将返回true,如果不是,则返回false 这是我的代码: function LoadImages(fi) { var status = new Array(); for (var i = 0; i < fi.length; i++) { var fr = new FileReader; fr.onloadend = (function (str) {

我使用的应用程序对加载的图像进行了一些图像处理,如果出现某种情况,它将返回true,如果不是,则返回false

这是我的代码:

function LoadImages(fi) {
    var status = new Array();

    for (var i = 0; i < fi.length; i++) {
        var fr = new FileReader;
        fr.onloadend = (function (str) {
            if (typeof str === "object") {
                str = str.target.result; // file reader
                var img = new Image();

                img.onload = (function () {
                    if (some_coditions)
                        status.push(true);
                    else
                        status.push(false);
                });
                img.src = str;
                ImgNam.push(str);
            }
        })
        fr.readAsDataURL(fi[i]);
    }
    return status
}


$("#Images").change(function () {
    var fi = $(this)[0].files;
    var status = LoadImages(fi);
});
函数加载图像(fi){
var status=新数组();
对于(变量i=0;i
在html中:

<input id="Images" type="file" multiple />


我想获取状态数组。问题是函数LoadImages在加载完成之前返回值。我知道发生这种情况的原因,但我不知道如何解决它

您不能返回任何非同步获取的值,因为在调用
fr.onloadend
时函数已经返回了。但是,您可以返回承诺,而不是数组:

function LoadImages(fi) {
  var deferred = new Promise(function(resolve, reject) {
    var status = [];
    // do some asynchronous work, like putting images into an array
    // ...
    // when you are ready to return, call resolve with your return value
    resolve(status);
  });

  // return the promise
  return deferred;
}
然后,您可以编写以下内容,而不是期望返回值:

var fi = $(this)[0].files;
LoadImages(fi).then(function(status) {
  // use status here.
});

你应该使用你的意思是我可以使用相同的LoadImages代码,但我应该把它放在承诺中?是的,与其返回值,不如解决承诺。有一个很好的承诺介绍。