【问题标题】:Working with promises jQuery使用承诺 jQuery
【发布时间】:2015-08-06 06:59:22
【问题描述】:

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

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值的承诺来存储它,但我不明白承诺是如何工作的.

有人可以向我解释一下如何将这段代码执行到 Promise 中并存储结果 (e.target.result)?

感谢大家的帮助。

【问题讨论】:

  • 您可以使用回调,但您已经有了一个回调,即对 onload 事件处理程序的回调。使用 Promise 并不能真正帮助您在加载之前访问它们,它只是更容易将事物移出回调,并仍然等待事件发生。

标签: javascript jquery arrays promise filereader


【解决方案1】:

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

Promise 不返回值,它们“包含”它们 - Promise 是一个包装器,代表一个异步值,一个指向未来的指针。

但我不明白 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
});

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

【讨论】:

  • 哇,谢谢大家,这对我有用,你帮助我更多地了解 promise 的工作原理。我会更加关注他们的工作原理。
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 2019-07-08
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 2012-11-16
相关资源
最近更新 更多