2016-04-03 9 views
1

私はpromiseを使ってangularjsにhtml5ディレクトリ関数を作成しようとしています。 しかし、約束どおりに定義されていないエラーが表示されます。Promise create custom failは関数ではありません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) 

。 失敗した代わりにキャッチを使用しました。 thisのようなカスタムエラーコールバックの作成方法

+0

'新しいpromise'?それはタイプミスです、それは '新しい約束 'でなければなりません。 'Promise' =>' P'は大文字でなければなりません... – Rayon

+0

それは誤字です。今フェイルコールバック関数をキャッチする方法。それはエラーを引き起こす。 –

答えて

4

promiseにタイプミスがあります。new Promiseです。 Promiseの代わりに$qを使用することをお勧めしますが、

Promiseオブジェクトの代わりに$qを使用する利点は、角度コンテキスト&を使用するとダイジェストサイクルを手動で実行する必要はありません。あなたが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シンプルなtypographical error .__フラグです。 – Rayon

+0

@RayonDabreは私の更新された答えを見ています。私たちが ' Promise' .. –

+0

が合意... OPは今、問題に直面しなくても...彼はとすぐにそれを持つことになる 'Promise'。.. – Rayon