2015-10-28 107 views
2

我想知道用戶是否有他的電腦上的攝像頭,如果他有,改變視圖。它的工作原理是,等待api中最初的回調響應,然後返回true或false。但它凍結,當我做一個控制檯日誌,我得到無盡的控制檯日誌..什麼會導致這種情況?

服務

'use strict'; 
angular.module("browserSupportService") 

     .factory("browsersCameraSupportService", function($q) { 

      return { 

       supportsGetUserMedia: function() { 

        navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; 

        return $q(function(resolve, reject) { 
         if (navigator.getUserMedia) { 
          navigator.getUserMedia({video: true}, function(localMediaStream) { 
           return resolve(true); 
          }, function() { 
           return resolve(false); 
          }); 
         } 
        }); 
       } 
      }; 
     }); 

功能的控制器:

$scope.browserSupportsGetUserMedia = function() { 

       browsersCameraSupportService.supportsGetUserMedia().then(function(supported) { 
       console.log("no camera") 
       if (!supported) { 
        return false; 
       } 
       return true; 
      }); 
+1

並不明顯,爲什麼從上面的代碼。你如何調用'browserSupportsGetUserMedia'?你沒有別的辦法'if(navigator.getUserMedia)'承諾可能無法解決。 –

+0

它解決了,試圖調試... –

+0

@AkinDönmez,如果它解決了,你可以添加解決方案作爲迴應? –

回答

0

我覺得你的承諾可能永遠不會被解決本身,根據MDN文件的時間:

提示用戶允許使用一個視頻和/或一個音頻輸入設備,例如相機或屏幕共享和/或麥克風。如果用戶提供權限,則以生成的MediaStream對象作爲參數調用successCallback。如果用戶拒絕權限或媒體不可用,則分別使用PermissionDeniedError或NotFoundError調用errorCallback。 請注意,由於用戶不需要做出選擇,因此可能無法調用完成回調。

,還設有如果(navigator.getUserMedia),不是不存在,你的諾言永不滿足問題。

所以,我會建議設置等待用戶分辨率的超時限制,如果沒有,請將承諾解決爲false,如果解決,請刪除超時。當然,處理如果問題。

喜歡的東西:

if (navigator.getUserMedia) { 
    var timeBomb = setTimeout(function(){resolve(false);}, 5000); 
    navigator.getUserMedia({video: true}, function(localMediaStream) { 
     clearTimeout(timeBomb); 
     return resolve(true); 
    }, function() { 
     clearTimeout(timeBomb); 
     return resolve(false); 
    }); 
}else{ 
    resolve(false); 
}