使用承诺 jQuery

Working with promises 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,因为reader只是async任务,我搜索我需要做一个承诺returns y存储它的价值,但我不明白 promise 是如何工作的。

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

感谢大家的帮助。

I need to do a promises that returns my value to store it

Promise 没有 return 值,它们 "contain" 它们 - Promise 是一个包装器,代表一个异步值,一个指向未来的指针。

but I don't understand how promise works

在将它们应用到您的代码之前,您绝对应该这样做。你会找到一些好的资源 here or at https://www.promisejs.org/.

how can I execute this code into a promise and store the result?

看看 How do I convert an existing callback API to promises? for the generic approach. For jQuery, you will construct a 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
});

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