2017-07-19 4 views
1

Ich würde jede Hilfe beim Debuggen des Problems unten schätzen.warten auf http-Erfolg vor dem Zurückschleifen - Angular 4

Current State

// Iteration #1 (Logs) 

index = 0 
id = 0, deleted = 0 
userIdfaList:: A,B,C,D 

// after success 
id ---> 33 
response:: Object {id: 33, name: "Test", deleted: 0, userIdfaList: Array(4)} 

// Iteration #2 (Logs) 

index = 1 
id = 0, deleted = 0 
userIdfaList:: AA,BB,CC,DD 

// after success 
id ---> 35 
response:: Object {id: 35, name: "Test", deleted: 0, userIdfaList: Array(4)} 

// Iteration #3 (Logs) 

index = 2 
id = 0, deleted = 0 
userIdfaList:: AAA,BBB,CCC,DDD 

// after success 
id ---> 34 
response:: Object {id: 34, name: "Test", deleted: 0, userIdfaList: Array(4)} 

Erwartetes Verhalten

Sobald die ID als Antwort vom ersten Erfolg abgerufen wird, weisen diese ID an den Rest der Partien.

// Iteration #1 (Logs) 

index = 0 
id = 0, deleted = 0 
userIdfaList:: A,B,C,D 

// after success 
id ---> 33 
response:: Object {id: 33, name: "Test", deleted: 0, userIdfaList: Array(4)} 

// Iteration #2 (Logs) 

index = 1 
id = 33, deleted = 0 
userIdfaList:: AA,BB,CC,DD 

// after success 
id ---> 33 
response:: Object {id: 33, name: "Test", deleted: 0, userIdfaList: Array(4)} 

// Iteration #3 (Logs) 

index = 2 
id = 33, deleted = 0 
userIdfaList:: AAA,BBB,CCC,DDD 

// after success 
id ---> 33 
response:: Object {id: 33, name: "Test", deleted: 0, userIdfaList: Array(4)} 

component.ts

userAudience(name, userIdfaListArray){ 
    let id = null, 
     deleted = null; 
    for (let i=0;i<userIdfaListArray.length;i++){ 
     console.log("index = ", i); 
     if (i == 0){ id = deleted = 0; } 
     console.log(`id = ${id}, deleted = ${deleted}`); 
     let userIdfaList = userIdfaListArray[i]; 
     console.log(`userIdfaList:: ${userIdfaList}`); 
     this._audienceService.uploadMobileAdIds(id, name, deleted, userIdfaList) 
     .subscribe(
      data => { 
       if (data.status === 'success') { 
        id = data.response.id; 
        console.log("id ---> ", id); 
        console.log("response:: ", data.response); 
        this.batchIds.push(data.response.userIdfaList); 
       } else { 
        console.log(`errorcode: ${data.errorcode}`); 
        console.log(`error message: ${data.message}`); 
       } 
      }, 
      error => error.status 
     ); 
    } 
} 
+0

Was ist das unerwartete Verhalten? – Mickers

Antwort

1

macht das beobachtbare Objekt aus dem for-Schleife trennen. Da beobachtbare Verwendung, um den asynchronen Datenstrom zum Zeitpunkt Ereignis subscribe für Schleife behandeln möglicherweise bereits ausgeführt werden. Um dies zu verhindern, erstellen Sie eine separate Funktion und rufen Sie sie in der for-Schleife auf.

+0

Sie haben ID, name und deleted nicht in den Parametern übergeben, wenn Sie die Funktion callAudience aufrufen, die für den HTTP-Aufruf erforderlich ist. Wenn Sie sie weitergeben, wie würden Sie die "ID" aktualisieren? – absingharora

Verwandte Themen