我处理对加载的图像进行了一些图像处理的应用程序,如果出现某种情况,它将返回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);
});
在html中:
<input id="Images" type="file" multiple />
我想获得状态数组。问题是LoadImages函数在加载完成之前返回值。我知道这种情况发生的原因,但我不知道如何解决它。
答案 0 :(得分:5)
您无法异步返回任何值,因为在调用$token = $this->config->item('id_token');
$domainname = $this->config->item('domainname');
$functionname = 'core_course_create_courses';
$restformat = 'json';
//crear objeto de acuerdo a la estructura para crear Categoría en Moodle
$curso = new stdClass();
$curso->fullname = $data['patron']['nombre'];
$curso->shortname = $data['patron']['nombre']; // Is unique
**$curso->idnumber = $id; // consecutive
$curso->visible = 1;
$curso->categoryid = 6;
$modulos = array($curso);
$params = array('courses' => $modulos);
header('Content-Type: text/plain');
$serverurl = $domainname . '/webservice/rest/server.php' . '?wstoken=' . $token . '&wsfunction=' . $functionname;
require_once(APPPATH . 'libraries/curl.php');
$curl = new curl;
$restformat = ($restformat == 'json') ? '&moodlewsrestformat=' . $restformat : '';
$resp = $curl->post($serverurl . $restformat, $params);
return $resp;
时该函数已经返回。但是,您可以返回Promise,而不是数组:
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;
}