我需要存储一些图像,我这样取值:
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
});
但是请注意,依赖于这个值的所有东西都是异步的,现在应该变成一个承诺返回函数