2016-04-03 8 views
1

Wie ich versuche, Versprechen zu verwenden, HTML5 Verzeichnisfunktionen in angularjs zu erstellen. aber es zeigt Fehler als Versprechen nicht definiert.Promise create custom fail ist keine Funktion Angularjs error?

Angular-Datei: -

$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-Datei: -

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) 

wie Versprechen richtig erstellen und an Winkelfunktion binden. Ich habe Fang verwendet, anstatt zu scheitern, es hat funktioniert. wie man benutzerdefinierten Fehler Callback zu allen Fehlerfunktion wie this

+0

'neues Versprechen'? Es ist ein Tippfehler, es muss "neues Versprechen" sein. 'Versprechen' =>' P' muss in der Hauptstadt sein ... – Rayon

+0

ok es war ein Tippfehler. Jetzt, wie die Fail-Callback-Funktion abfangen. es verursacht einen Fehler. –

Antwort

4

erstellen Es gibt Tippfehler in promise, sollte es new Promise sein. Obwohl ich Ihnen vorschlagen würde, $q anstelle von Promise zu verwenden.

Der Vorteil $q anstelle von Promise Objekt ist, werden Sie Code Winkel Kontext sein & Sie müssen nicht manuell verdauen Zyklus laufen zu kümmern. Wo als ob Sie Promise verwenden, dann müssen Sie Digest-Zyklus manuell ausführen (als Promise wäre native asynchrone JS-Funktion, die außerhalb der Welt von angular sein).

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; 
}; 

aktualisieren

.fail Funktion auf $q Objekt nicht verfügbar ist, müssen Sie unter Ihrem fileManager.createDirectory Funktion Coderuf ändern.

$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

Wenn es nur ein Typ ist ... Wir haben einen __ein einfachen Tippfehler .__ Flag dafür .. – Rayon

+0

@RayonDabre schaue auf meine aktualisierte Antwort..anders als das müssen wir uns darum kümmern, Digest-Zyklus auszuführen, wenn wir 'verwenden Versprechen ... –

+0

Einverstanden ... Obwohl OP ist nicht das Problem im Moment .. Er wird es bald mit 'Promise' .. – Rayon