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

时间:2015-11-09 17:09:07

标签: 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) {
            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函数在加载完成之前返回值。我知道这种情况发生的原因,但我不知道如何解决它。

1 个答案:

答案 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;
}
相关问题