感谢您在调试下面的问题时提供帮助。
当前状态
// 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)}
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 :(得分:1)
使可观察对象与for循环分开。由于可以在事件订阅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
);
}
}