2017-05-19 104 views
1

考慮下面的代碼,檢測是否該圖片src是角HTMLImageElemen處理HTMLImageElemen.src在哪裏?

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")}) 

有效的,如果我跑我的上述控制檯中的代碼將打印

success 

2倍

return 

is print 1次

看起來像某處有一個更改處理程序看着財產?

我的問題是.src的更改處理程序在哪裏,爲什麼.then只解決一次?

回答

0

我的問題是,什麼是.src變化處理程序駐留

javascript的問題集onerroronload處理程序<img>元素。 .src<img>的屬性設置了兩次,調用onerroronload事件處理程序兩次。

爲什麼是。然後只解決一次?

A Promise最多可以解決或拒絕一次。 .then()被稱爲一次鏈接到Promise對象。

+0

但它在哪裏檢測到'src'正在改變? – Jal

+0

@Jal在'load'和'error'事件。 _「如果在嘗試加載或渲染圖像時發生錯誤,並且已將onerror事件處理程序配置爲處理['error'](https://developer.mozilla.org/en-US/docs/Web/事件/錯誤)事件,該事件處理程序將被調用。「_參見[''](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) – guest271314

+0

另請參見[加載](https://html.spec.whatwg.org/multipage/indices.html#event-load)事件。 – guest271314