2016-08-10 11 views
0

uploadFiles関数の実行後にイメージパスを取得したいとします。このようにして、self.ProjectImagePathに値を割り当てます。しかし、それは機能していない、私はそれが関数呼び出しの直後に実行すると思います。誰でも助けることができますか?変数が別の関数によって変更された後の変数の使用 - 定義されていない取得

 self.submitProject = function(file) { 
      console.log("Submit Project \n"); 
      uploadFiles.apply(this, arguments); 
      console.log(self.ProjectImagePath); ///ERROR HERE!!!! (UNDEFINED) 
      var data = JSON.stringify({ 
       name: self.ProjectName, 
       room: self.room, 
       managers: self.Managers, 
       members: self.ProjectMembers, 
       image: self.ProjectImagePath 
      }); 
      //console.log(data); 
      $http.post('/rooms/' + self.room + '/project', data).success(function(data) { 
       //$window.location.href = "/"; 
      }); 
     } 

     function uploadFiles(file) { 
      file.upload = Upload.upload({ 
       url: 'projectImages/upload', 
       data: { 
        file: file 
       } 
      }); 

      file.upload.then(function(response) { 
       $timeout(function() { 
        file.result = response.data; 
        self.ProjectImagePath = file.result; 
       }); 
      }, function(response) { 
       if (response.status > 0) 
        self.errorMsg = response.status + ': ' + response.data; 
       }); 
     } 

実行後、イメージはサーバーにアップロードされますが、そのパスは取得できません。 AngularJSを使用しています

+2

あなたの 'はconsole.log()アップロードからの応答が完了する前に'起こります。詳細な説明[ここ](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call)。 – Jasen

+0

あなたはresponse.dataを印刷しましたか? – Ramesh

+0

UploadFiles()内に印刷すると、ファイルパスが表示されます。 –

答えて

1

約束(非同期アクション)が完了する前に、呼び出しコードに問題がありました。

これは、あなたが必要なものを行う必要があります。

self.submitProject = function(file) { 
    console.log("Submit Project"); 

    function handleSuccess(response) { 
     self.ProjectImagePath = file.result = response.data; 

     // Should work correctly. 
     console.log(self.ProjectImage); 

     var data = JSON.stringify({ 
      name: self.ProjectName, 
      room: self.room, 
      managers: self.Managers, 
      members: self.ProjectMembers, 
      image: self.ProjectImagePath 
     }); 

     $http.post('/rooms/' + self.room + '/project', data).success(function(data) { 
      //$window.location.href = "/"; 
     }); 
    } 

    function handleError(response) { 
     if (response.status > 0) 
      self.errorMsg = response.status + ': ' + response.data; 
    } 

    uploadFiles(file, handleSuccess, handleError); 
}; 

function uploadFiles(file, successCallback, errorCallback) { 
    file.upload = Upload.upload({ 
     url: 'projectImages/upload', 
     data: { 
      file: file 
     } 
    }); 

    file.upload.then(successCallback, errorCallback); 
} 
+0

私はそれを試みました。それは "未定義のプロパティ 'を次に読み取ることはできません" –

+1

私は、コードを更新してみてください。 – TW80000

+0

それは働いた。私が見たことで、あなたはコールバックスに順応しましたよね?私はいつもコールバックと混同しています –

関連する問題