如何在加载多个图像后 return 数组?
How to return array after loading multiple images?
我的应用程序对加载的图像进行了一些图像处理,如果出现某些情况,它将 return 为真,否则为 return 假。
这是我的代码:
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);
});
在html中:
<input id="Images" type="file" multiple />
我想获取状态数组。问题是函数 LoadImages return 加载完成之前的值。我知道发生这种情况的原因,但我不知道如何解决。
您不能 return 异步获取任何值,因为在调用 fr.onloadend
时该函数已经 return 编辑。但是,您可以 return Promise,而不是数组:
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;
}
那么你应该写成:
而不是期望 return 值
var fi = $(this)[0].files;
LoadImages(fi).then(function(status) {
// use status here.
});
我的应用程序对加载的图像进行了一些图像处理,如果出现某些情况,它将 return 为真,否则为 return 假。
这是我的代码:
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);
});
在html中:
<input id="Images" type="file" multiple />
我想获取状态数组。问题是函数 LoadImages return 加载完成之前的值。我知道发生这种情况的原因,但我不知道如何解决。
您不能 return 异步获取任何值,因为在调用 fr.onloadend
时该函数已经 return 编辑。但是,您可以 return Promise,而不是数组:
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;
}
那么你应该写成:
而不是期望 return 值var fi = $(this)[0].files;
LoadImages(fi).then(function(status) {
// use status here.
});