2017-03-07 15 views
0

私の目標はforループ経由で配列を設定することです。そのアレイをHTTPPOSTコールで送信します。約束事とhttp呼び出しの角度でのループ

:最初にすべてのファイルをアップロードし、各ファイルの詳細を配列にプッシュします。

// For multiple files 
for (let i = 0; i < projectRefFilesForUploading.length; i++) { 
    this.postSingleFile([] = projectRefFilesForUploading[i].file, projectDir).then(uploadedFiles => { 

     let filePath = uploadedFiles['projectRefFiles'][0].fd; 
     filePath = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.lastIndexOf(".")); 
     let filename = uploadedFiles['projectRefFiles'][0].filename; 
     let size = uploadedFiles['projectRefFiles'][0].size; 
     let type = uploadedFiles['projectRefFiles'][0].type; 
     let status = uploadedFiles['projectRefFiles'][0].status; // finished 
     let fileNote = projectRefFilesForUploading[i].fileNote; 

     projectRefFilesDataArray.push({fileName: filename, filePath: filePath, size: size, type: type, fileNote: fileNote}); 
    }); 
} 

ie:http post callで配列をポストします。

let body = { 
    projectId: projectId, 
    projectRefFiles: projectRefFilesDataArray 
} 

let headers = new Headers(); 
let options: RequestOptionsArgs = { headers: headers, withCredentials: true } 
return new Promise((resolve, reject) => { 

    this.http.post(this.apiEndpoint + "/add/all", body, options).toPromise() 
    .then(response => { 
     let jsonData = response.json(); 
     if (jsonData.apiStatus == 1) { 
      resolve(jsonData); 
     } 
     else reject(jsonData.message); 
    }) 
    .catch(reason => reject(reason.statusText)); 
}); 

問題は、async関数呼び出し、ループの実行と並行してそのデータポストhttpコールにあります。したがって、それはhttp呼び出しで空の配列を送ります。呼び出しメソッドをループ内に置くと動作します。しかし、それはあまりにも多くのループを作成して呼び出しを作成しました。

どのように検出するために、私を助けてください、ループがhttpコール

答えて

0

た後、それに実行を終了すると、この方法を試してください。()メソッド、HTTPのPOST呼び出しの約束内側に、 `response` promise.thenで

let promise = new Promise((resolve, reject) => { 
     let count = 0; 
     for (let i = 0; i < projectRefFilesForUploading.length; i++) { 
      this.postSingleFile([] = projectRefFilesForUploading[i].file, projectDir).then(uploadedFiles => { 
       count++; 
       let filePath = uploadedFiles['projectRefFiles'][0].fd; 
       filePath = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.lastIndexOf(".")); 
       let filename = uploadedFiles['projectRefFiles'][0].filename; 
       let size = uploadedFiles['projectRefFiles'][0].size; 
       let type = uploadedFiles['projectRefFiles'][0].type; 
       let status = uploadedFiles['projectRefFiles'][0].status; // finished 
       let fileNote = projectRefFilesForUploading[i].fileNote; 

       projectRefFilesDataArray.push({fileName: filename, filePath: filePath, size: size, type: type, fileNote: fileNote}); 
       if(count === projectRefFilesForUploading.length){ 
        resolve(projectRefFilesForUploading); 
       } 
      }); 
     } 
     }); 


    promise.then(function(projectRefFilesDataArray){ 
    let body = { 
     projectId: projectId, 
     projectRefFiles: projectRefFilesDataArray 
    } 

    let headers = new Headers(); 
    let options: RequestOptionsArgs = { headers: headers, withCredentials: true } 
    return new Promise((resolve, reject) => { 

     this.http.post(this.apiEndpoint + "/add/all", body, options).toPromise() 
     .then(response => { 
      let jsonData = response.json(); 
      if (jsonData.apiStatus == 1) { 
       resolve(jsonData); 
      } 
      else reject(jsonData.message); 
     }) 
     .catch(reason => reject(reason.statusText)); 
    }); 

    }); 
+0

'reason'は定義されません。それを修正するための任意のアイデア? –

+0

あなたの答えは本当に助けになりました。 anywaythanks –

+0

申し訳ありませんが私はあなたの最初の返信を参照してください。どういたしまして。 –

関連する問題