On 3/12/14 9:32 AM, Jake Archibald wrote:
You're right, I was short on detail for that case.

img.src = foo;
var promise1 = img.loaded();
img.src = bar;

I expect promise1 to reject with an AbortError.

No, the case I'm worried about is when the first load has already finished, you call loaded(), get a promise (already resolved), and then a new load starts, and maybe finishes, before the promise has notified things. So more like this:

  var promise1;
  img.onload = function() {
    promise1 = img.loaded();
    img.onload = null;
    img.src = bar;
  };
  img.src = foo;

I realize no one would write actual code like this; the real-life use case I'm worried about would be more like this:

  // img is already loaded sometimes
  // Would like to observe a new load
  var promise1 = img.loaded(); // oops! This will be pre-resolved if
                               // we were already loaded, but otherwise
                               // will resolve with the new load we're
                               // about to start.
  img.src = bar;

Is my concern making sense?

Images are particularly pernicious here because "img.src = bar" might synchronously finish the load, even if it fires the load event async.

-Boris

Reply via email to