Использование обновления с пакетным методом в цикле в Firestore

Проблема с безопасностью Gmail по умолчанию предотвращает доступ к вашей учетной записи электронной почты из пользовательских приложений. Вы можете настроить его, чтобы принять логин из вашего приложения.

После входа на ваш адрес электронной почты, ЩЕЛКНУТЬ ЗДЕСЬ

Это приведет вас к следующая страница

1
задан Frank van Puffelen 13 July 2018 в 16:07
поделиться

1 ответ

Поскольку вы находитесь внутри функции обратного вызова, значение this отличается от внешнего.

Самое простое решение - назначить ваш memberCollection отдельной переменной вне обратного вызова :

var batch = this.afs.firestore.batch();
var eventRef = this.eventCollection.doc(eventkey).ref;
var memberCollection = this.memberCollection;
batch.update(eventRef, updateField );
if(artists) {
  Object.values(artists).forEach(function(artist) {
    var artistkey = artist.$key;
    var artistRef = memberCollection.doc(artistkey).collection('events').doc(eventkey).ref;
    batch.update(artistRef, updateField); 
  });
}
batch.commit().then(function() {console.log('success')};

Но вы также можете использовать синтаксис стрелок для функций, который предотвращает переназначение this:

var batch = this.afs.firestore.batch();
var eventRef = this.eventCollection.doc(eventkey).ref;
batch.update(eventRef, updateField );
if(artists) {
  Object.values(artists).forEach((artist) => {
    var artistkey = artist.$key;
    var artistRef = this.memberCollection.doc(artistkey).collection('events').doc(eventkey).ref;
    batch.update(artistRef, updateField); 
  });
}
batch.commit().then(function() {console.log('success')};

Это чрезвычайно распространенный вопрос JavaScript и применяется везде вы имеете обратные вызовы (не только с Firestore). Я рекомендую вам ознакомиться с некоторыми из предыдущих вопросов по этой теме:

1
ответ дан Frank van Puffelen 17 August 2018 в 12:27
поделиться
  • 1
    спасибо Фрэнку за ваш ответ ... очень точный и полный! – C. Banzet 13 July 2018 в 16:54
Другие вопросы по тегам:

Похожие вопросы: