2017-05-19 2 views
1

Betrachten Sie den folgenden Code, wenn das Bild src gültig erkennen ist in WinkelWo wird HTMLImageElemen.src für HTMLImageElemen behandelt?

isImage: function(src) { 

     var deferred = $q.defer(); 

     var image = new Image(); 
     image.onerror = function(data) { 
      console.log(data, "error"); 
      deferred.resolve([false, src]); 
     }; 
     image.onload = function(data) { 
      console.log(data, "success"); 
      deferred.resolve([true, src]); 
     }; 

     image.src = "some_valid_image_url" 
     setTimeout(function() { 
      image.src = "some_valid_image_url" 
     }, 5000) 

     return deferred.promise; 
    } 



isImage("some_valid_image_url").then(function() {console.log("return")}) 

Wenn ich den Code über meine Konsole laufen

success 

2 mal

aber

gedruckt wird
return 

wird 1 mal gedruckt

Scheint, als ob irgendwo ein Change-Handler die Immobilie beobachtet?

Meine Frage ist, wo ist der Change-Handler für .src residiert und warum .then nur einmal auflösen?

Antwort

0

Meine Frage ist, wo der Handler für .src Änderung ist

javascript in Frage stellt onerror und onload Handler für <img> Element befinden. .src Eigenschaft von <img> wird zweimal festgelegt und ruft onerror oder onload Ereignishandler zweimal auf.

und warum wird dann nur einmal gelöst?

A Promise kann höchstens einmal aufgelöst oder abgelehnt werden. .then() wird einmal an Promise Objekt angekettet aufgerufen.

+0

Aber wo erkennt man, dass sich 'src' ändert? – Jal

+0

@Jal Bei 'load' und' error' Ereignissen. _ "Wenn beim Versuch, das Image zu laden oder zu rendern, ein Fehler auftritt und ein Event-Handler für das Ereignis onerror konfiguriert wurde, um den [error'] zu behandeln (https://developer.mozilla.org/en-US/docs/Web/ Events/error) Event, dieser Event-Handler wird aufgerufen. "_ Siehe [' '] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) – guest271314

+0

Siehe auch [ laden] (https://html.spec.whatwg.org/multipage/indices.html#event-load) Ereignis. – guest271314

Verwandte Themen