使用承诺jQuery



我需要存储一些图像,我这样取值:

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)?

谢谢大家的帮助。

我需要做一个promise返回我的值来存储它

promise不返回值,它们"包含"值——promise是一个封装器,它代表一个异步值,一个指向未来的指针。

但我不明白承诺是如何起作用的

在将它们应用到你的代码之前,你绝对应该这样做。你可以在这里或https://www.promisejs.org/找到一些很好的资源。

我如何执行这段代码到一个承诺和存储结果?

看一下如何将现有的回调API转换为承诺?对于通用方法。对于jQuery,您将构建一个稍后可以解析的Deferred对象,并且可以立即从。

中获得未来值的承诺。
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
});

但是请注意,依赖于这个值的所有东西都是异步的,现在应该变成一个承诺返回函数

最新更新