2016-04-03 41 views
1

正如我試圖使用承諾在angularjs中創建html5目錄函數。 但它顯示錯誤,因爲承諾沒有定義。Promise創建自定義失敗不是一個函數Angularjs錯誤?

角文件: -

$scope.createDirectory = function(dirName,dirLocation){ 
     fileManager.createDirectory(dirName,dirLocation) 
     .then(function(data){ 
      console.log(data, "dir created"); 
     }).fail(function(err){ 
      console.log(err,"dir err while creating"); 
     }); 
    }; 

JS文件: -

var fileManager = { 
createDirectory: function(directoryName,dirLocation){ 
        var makePromise = new Promise(function(resolve, reject){ 
         dirLocation.getDirectory(directoryName, {create: true, exclusive: false}, function(data){ 
          resolve(data); 
         }, function(error){ 
          reject(error); 
         }); 
        }); 
        return makePromise; 
       } 
} 

TypeError: fileManager.createDirectory(...).then(...).fail is not a function 
at h.$scope.createDirectory (app.js:60) 
at angular.min.js:196 
at f (angular.min.js:224) 
at h.$eval (angular.min.js:123) 
at h.$apply (angular.min.js:123) 
at HTMLButtonElement.<anonymous> (angular.min.js:224) 
at HTMLButtonElement.c (angular.min.js:32) 

如何正確地創建諾言並將其綁定到角功能。 我使用catch而不是失敗它的工作。如何創建自定義錯誤回調到所有失敗功能,如this

+0

'new promise'?這是一個錯字,它必須是'新的承諾'。 'Promise' =>'P'必須在首都... – Rayon

+0

確定這是一個錯字。現在如何捕捉失敗回調函數。它導致錯誤。 –

回答

4

有錯字promise,它應該是new Promise。雖然我建議你使用$q而不是Promise

使用$q而不是Promise對象的優點是,您的代碼將是角度上下文&您無需關心手動運行摘要循環。如果你使用Promise,那麼你需要手動運行摘要循環(因爲Promise將是本地異步JS功能,被認爲是角度的外部世界)。

createDirectory: function(directoryName, dirLocation) { 
    var makePromise = $q(function(resolve, reject) { 
     dirLocation.getDirectory(directoryName, { 
      create: true, 
      exclusive: false 
     }, function(data) { 
      resolve(data); 
     }, function(error) { 
      reject(error); 
     }); 
    }); 
    return makePromise; 
}; 

更新

.fail功能不可用在$q對象,你需要你的fileManager.createDirectory函數調用的代碼更改爲以下。

$scope.createDirectory = function(dirName,dirLocation){ 
    fileManager.createDirectory(dirName,dirLocation) 
    .then(function(data){ //success callback 
     console.log(data, "dir created"); 
    }, function(err){ //error callback 
     console.log(err,"dir err while creating"); 
    }); 
}; 
+0

如果它只是一個類型...我們有一個__a簡單的印刷錯誤.__標誌爲.. – Rayon

+0

@RayonDabre看看我更新的答案..除此之外,我們需要關心運行摘要循環,如果我們使用' Promise' .. –

+0

同意......儘管OP現在沒有面臨這個問題..他將盡快與'Promise'合作.. – Rayon

相關問題