У меня есть массив javascript-объекта, который выглядит следующим образом.Сохранить массив объекта в firebase без получения 0,1,2 ... как ключ
jsObjFromCsv =
[
{
"J251525" : {
"APPROVER" : "[email protected]",
"JOB DESCRIPTION " : "CLEAN THE HOUSE",
"JOB NUMBER" : "J251525"
}
}, {
"J512912" : {
"APPROVER" : "[email protected]",
"JOB DESCRIPTION " : "BRUSH HORSE",
"JOB NUMBER" : "J512912"
}
}, {
"J5-512" : {
"APPROVER" : "[email protected]",
"JOB DESCRIPTION " : "WASH CAR",
"JOB NUMBER" : "J5-512"
}
}
]
Однако, когда я сохранить firebase используя следующий код он выглядит как этот
saveJobToFirebase(jobs: Array<Object>) {
const jobCodesRef = this.af.database.list('/jobCodes/' + this.currentUser.company)
return jobCodesRef.push(jobs);
}
Я хочу, чтобы избавиться от 0,1,2 таким образом, что я могу конец запроса точки, как
jobCodes/Company1/-Kc8Q5Wuq4M91puQ_70J/J251525
----------------- Моя попытка --------------
Я подумал о том, как это работает, но, похоже, это не так хорошо, как объяснялось в конце этого.
Так добиться того, что я хотел, я в первую очередь изменить массив объектов, чтобы быть следующим
[
{
"APPROVER" : "[email protected]",
"JOB DESCRIPTION " : "CLEAN THE HOUSE",
"JOB NUMBER" : "J251525"
}, {
"APPROVER" : "[email protected]",
"JOB DESCRIPTION " : "BRUSH HORSE",
"JOB NUMBER" : "J512912"
}, {
"APPROVER" : "[email protected]",
"JOB DESCRIPTION " : "WASH CAR",
"JOB NUMBER" : "J5-512"
}
]
Тогда я Перебери каждый объект и захватить номер задания, чтобы получить конечную точку и непосредственно «SET "его к базе с кодом
saveJobToFirebase(jobs: Array<Object>) {
// previous code
// const jobCodesRef = this.af.database.list('/jobCodes/' + this.currentUser.company)
// return jobCodesRef.push(jobs);
// bad attempt?
for (let job of jobs) {
const jobCodesRef = this.af.database.object('/jobCodes/' + this.currentUser.company + '/' + job['JOB NUMBER']).set(job);
}
}
И это дает мне результат, который я хотел.
Однако, есть две большие проблемы с этим методом
мой saveJobToFirebase больше не возвращает thenableReference для меня, чтобы позвонить .then в моем компоненте. Это означает, что у меня не было бы способа отслеживать, было ли действие успешным
Я не знаю, является ли обновление firebase с циклом for - хорошая идея? Что делать, если этот объект JSON имеет 2000 записей ... Я бы забил конечную точку, если я вызову ее внутри цикла for. Было бы лучше, если бы я мог «подтолкнуть» его так, чтобы все поступало с одним запросом?
Еще раз спасибо Frank. Мне также пришлось перейти к this.af.databse.object, чтобы заставить его работать. Но отличное решение и детализация! ура – user172902