0

現在、angularjs を使用し、mediafire javascript SDK を使用していくつかのタスクを実行するアプリを構築しています。

現在、アップロードが発生したときにフォルダーを作成する必要がある状況にあり、この関数は「フォルダーキー」を返します。コントローラーでコードをきれいに保つために、サービス関数で .then を使用して、新しいファイルをアップロードするプロセスを続行します。

私はかなりの調査を行いましたが、どのようにそれを行うかについてはまだ困惑しています. おそらく、私の状況の例は、何をする必要があるかを理解するのに役立つでしょう。

現在、フォルダーを作成するサービスに対してこの関数を実行しています。

mediafireService.createFolder('TestFolder');

私はを頂きたい

 mediafireService.createFolder('TestFolder');
    .then(function(folderkey){
       //Upload file into that folder
    });

これが私の工場関数です。

  function createFolder(folderName){

     var options = { foldername: folderName };

     login(function(){
       app.api('folder/create', options, function(data) {
         console.log(data.response.folderkey);
         return data.response.folderkey;
       });
     });

  }

   function login(callback){

     app.login({
       email: 'email',
       password: 'pass'
     }, callback);

   };

javacriptがこれをネイティブに持っているのか、それとも外部サービスを使用する必要があるのか​​ どうかは完全にはわかりません。現時点ではちょっと迷っています。

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

2

createFolder基本的に、サービスの関数内に約束を作成していません。$q依存関係を使用してカスタム promise を構築できます。

メソッドから延期されたプロミスを返し、サーバーの応答に基づいてそのプロミスを解決または拒否します。

サービス

function createFolder(folderName) {
  var deferred = $q.defer();
  var options = {
    foldername: folderName
  };
  login(function() {
    app.api('folder/create', options, function(data) { //success
      console.log(data.response.folderkey);
      //this line will promise resolve
      //also it will send the folderKey to the consumer method.
      deferred.resolve(data.response.folderkey); 
    }, function(data) { //error
      //this line will promise reject with error msg
      deferred.reject('error ocurred');
    });
  });
  return deferred.promise;
};

コントローラ

mediafireService.createFolder('TestFolder').then(function(folderkey){
   //Upload file into that folder
}, function(error){
   //error handling
});
于 2016-01-16T10:54:19.303 に答える