Angular Firestore - Получить идентификатор документа как свойство, чтобы снова использовать его в другой функции - Typescript - PullRequest
0 голосов
/ 26 мая 2020

Итак, вот мой код:

getOutfitsCollectionData(): Promise<any> {
    let outfitsRef = this.afStore.collection('outfits');
    let allOutfits = outfitsRef.snapshotChanges().pipe(
        map(actions=>{
            return actions.map(a=>{
                const id = a.payload.doc.id;
                return id
            })
        })
    )
    let outfitsID =  allOutfits.forEach(outID=>{
        console.log(outID)
        return outID
    })
    return outfitsID
}
}

Когда я делаю эту часть

let outfitsID =  allOutfits.forEach(outID=>{
        console.log(outID)
        return outID
    })

Консоль дает мне это:

console perfect

Это именно то, что я хочу, я просто хочу переименовать массив и установить его как результат моей функции, но каждый console.log, который я помещаю в эти строки, ничего не делает, поэтому кажется, что каждая строка ниже ничего не делает.

Если я не понимаю, скажите мне, ребята!

Я пытаюсь получить идентификатор каждого документа из моей коллекции, чтобы использовать его в другой функции на той же вкладке.

Я думаю, что было бы проще создать сервис, но я действительно не знаю, как это сделать.

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

Спасибо за вашу помощь, ребята!

(кстати, извините за мой плохой английский sh, я француз :))

Так что немного отредактируйте:

Я попробовал этот код, я действительно не понимаю, почему, когда я console.log allOutfits, я не получаю хорошее значение:

async getOutfitsCollectionData(){
    let outfitsRef = this.afStore.collection('outfits');
    let allOutfits = await outfitsRef.get().toPromise().then((step)=>{
        return step.forEach(doc=>{
        if (!doc.exists){
            console.log('Zut !')
        }else{
            console.log(doc.id)
            return doc.id
        }
    })
})
.catch(err=>{
    console.log('Error getting outfits', err)
})
console.log(allOutfits)
return allOutfits
}

1 Ответ

0 голосов
/ 29 мая 2020

Проблема заключается в следующем коде:

return step.forEach(doc=>{
        if (!doc.exists){
            console.log('Zut !')
        }else{
            console.log(doc.id)
            return doc.id
        }

step - это QuerySnapshot, поэтому вы должны получить доступ к документам, используя step.docs. Функция forEach не возвращает вам массив, а вместо этого возвращает undefined. используйте map, который фактически возвращает преобразованные данные:

return steps.docs.map(doc => doc.id);
...