我必须存储一些图像,我的价值是这样的:
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
)?
感谢帮助人员。
答案 0 :(得分:0)
我需要做一个承诺,返回我的价值来存储它
承诺不会返回价值观,它们包含"包含"它们 - promise是一个表示异步值的包装器,指向未来的指针。
但我不明白诺言是如何运作的
在将它们应用到您的代码之前,您肯定应该这样做。您会找到一些好资源here或https://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
});
但请注意,依赖于此值的所有内容都是异步的,现在应该成为一个承诺返回函数。