При использовании обещаний я бы рекомендовал использовать функцию жирной стрелки, поскольку она открывает возможность использования this.foo даже в функции .then.
db.collection("cities").add({
name: "Tokyo",
country: "Japan"
})
.then(docRef => {
console.log("Document written with ID: ", docRef.id);
console.log("You can now also access this. as expected: ", this.foo)
})
.catch(error => console.error("Error adding document: ", error))
Использование function(docRef) означает, что вы не можете получить доступ к this.foo, и будет выдана ошибка
.then(function(docRef) {
console.log("Document written with ID: ", docRef.id);
console.log("You can now NOT access this. as expected: ", this.foo)
})
Функции жирных стрелок позволят вам получить доступ к this.foo, как и ожидалось
.then(docRef => {
console.log("Document written with ID: ", docRef.id);
console.log("You can now also access this. as expected: ", this.foo)
})
Правка / дополнение 2020:
В наши дни более популярным способом может быть использование async / await. Обратите внимание, что вы должны добавить async перед объявлением функции:
async function addCity(newCity) {
const newCityAdded = await db.collection("cities").add(newCity)
console.log("the new city:", newCityAdded)
console.log("it's id:", newCityAdded.id)
}
И если вам нужен только идентификатор, его можно получить с помощью деструктуризации. Деструктуризация позволяет получить любую пару ключ / значение в ответе:
async function addCity(newCity) {
const { id } = await db.collection("cities").add(newCity)
console.log("the new city's id:", id)
}
Также можно использовать деструктурирование, чтобы захватить значение и переименовать во все, что захотите:
async function addCity(newCity) {
const { id: newCityId } = await db.collection("cities").add(newCity)
console.log("the new city's id:", newCityId)
}
person
Christoffer
schedule
02.08.2018