等待 http 成功后再循环 - Angular 4



希望对调试以下问题有任何帮助。

当前状态

// 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)}

预期行为

从第一次成功中检索 id 以响应后,将该 id 分配给其余批处理。

// 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)}

组件.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
);
}
}

使可观察对象与 for 循环分开。由于可观察地使用在事件订阅循环时处理异步数据流可能已经执行。因此,为了防止这种情况,创建一个单独的函数并在 for 循环中调用它

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.callAudience(userIdfaLis)
}
callAudience(userIdfaLis) {
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
);
}
}

最新更新