Я читаю несколько записей пользователя из строки файла для строки.и каждая строка - это запись пользователя, которую я создаю, если она не существует.Одна и та же запись пользователя может быть в несколько строк.в общем, если я вижу, что он уже создан, я просто пропускаю.
код выглядит следующим образом
async onFilesAdded(files: FileList){
this.fileToUpload = files.item(0);
let fileReader = new FileReader();
fileReader.onload = async (e) => {
this.showProgress = true
var lines = fileReader.result.toString().split(/[\r\n]+/g); // tolerate both Windows and Unix linebreaks
this.totalLines = lines.length
var firstLine = false
this.dcSvc.getPageImages().then(
(resp) => {
console.log("resp in getPageImage" + JSON.stringify(resp))
this.pageMap = resp
this.lineCount = 0
for(let line of lines){
if(firstLine == false){
firstLine = true
}else{
this.createClickHistory(line).then(
(resp)=> console.log("line processed")
)
}
}
}
)
}
fileReader.readAsText(this.fileToUpload);
}
async createClickHistory(line:string){
var lineArr = line.split(',')
const userName = lineArr[1]
this.dcSvc.getUser(userName).then(
(res:any) => {
console.log("Response of get user is:::" + JSON.stringify(res))
if(res.length == 0 ){
//user does not exist in the DB
console.log("user:" + userName + " does not exist so creating it")
const userPayload = {
"userName": userName
}
this.dcSvc.createUser(userName, userPayload).then((rsp) => {})
}else{
//user exists so skip
}
}
createUser(userName:string, userPayload){
return this.db.object("/users/" + userName).set(userPayload)
}
getUser(userName:string){
return new Promise((resolve, reject) => {
this.db.list('/users',
ref => ref.orderByChild("userName").equalTo(userName)
).snapshotChanges().subscribe(
(res) => {
resolve(res)
}
)
})
}
Я наблюдаю, что код действительно не ждет обработки одной строки.В результате я должен выполнить код несколько раз, чтобы импортировать полные данные.