使用promises jQuery

时间:2015-05-24 19:26:12

标签: javascript jquery arrays promise filereader

我必须存储一些图像,我的价值是这样的:

var imgGaleria1 = $("#imgGaleria1")[0].files[0];
var imgGaleria1Blob;

if (imgGaleria1) {
    var reader = new FileReader();
    reader.onload = function (e) {
        reader.readAsDataURL(imgGaleria1);
        imgGaleria1Blob = e.target.result;
    };
}

但显然我无法存储到imgGaleria1Blob,因为读者只是async任务,我搜索到我需要做一个返回y值的承诺来存储它,但我不知道了解承诺是如何运作的。

有人可以向我解释如何将此代码执行到承诺并存储结果(e.target.result)?

感谢帮助人员。

1 个答案:

答案 0 :(得分:0)

  

我需要做一个承诺,返回我的价值来存储它

承诺不会返回价值观,它们包含"包含"它们 - promise是一个表示异步值的包装器,指向未来的指针。

  

但我不明白诺言是如何运作的

在将它们应用到您的代码之前,您肯定应该这样做。您会找到一些好资源herehttps://www.promisejs.org/

  

如何将此代码执行到promise并存储结果?

查看How do I convert an existing callback API to promises?的通用方法。对于jQuery,您将构建一个稍后可以解析的Deferred object,并且可以立即获得对该未来值的承诺。

var dfd = $.Deferred();
var reader = new FileReader();
reader.onload = function(e) {
    dfd.resolve(e.target.result);
};
reader.readAsDataURL(imgGaleria1);

promiseForImgGaleria1Blob = dfd.promise();

您稍后可以通过

消费该值
promiseForImgGaleria1Blob.then(function(imgGaleria1Blob) {
    // use the blob here
});

但请注意,依赖于此值的所有内容都是异步的,现在应该成为一个承诺返回函数。