我正在使用papaparse读取csv文件来获取记录,但问题是它对于数据库而言太快了。它会立即读取csv文件,但单个记录仍在数据库API中处理,因此只有一些记录在数据库中以随机顺序异步处理,并且所有记录都不会因此而进入数据库。我的代码是
onSubmit() {
this.papa.parse(this.csvFile, {
step: (row) => {
var jsonObj = this.arrayToJSON(row.data[0]);
console.log(jsonObj);
this.apiService.addEmployees(jsonObj).
subscribe(
add => this.arrayToJSON(jsonObj),
error => console.log("Error :: " + error))
}
});}
我希望papaparse等待db请求处理的所有内容,然后获取下一条记录。
答案 0 :(得分:0)
您可以使用Observable.concat:
onSubmit() {
// First of all, prepare an array of observables
const databaseWrites = [];
this.papa.parse(this.csvFile, {
step: (row) => {
let jsonObj = this.arrayToJSON(row.data[0]);
console.log(jsonObj);
databaseWrites.push(this.apiService.addEmployees(jsonObj));
}
});
// Once everything is prepared, use concat to do each operation one after another
Observable.concat(...databaseWrites).subscribe(() => { console.log('write success !')});
}
因为Observable很冷,你可以准备你的请求并订阅concat,以便让每个操作一个接一个地执行。