Вы можете использовать find()
метод в вашем массиве.Вот пример:
var items = [
'https://myfirebaseapp.com/videos/nice.mp4',
'https://myfirebaseapp.com/videos/bad.mp4',
'https://myfirebaseapp.com/videos/funny.mp4',
'https://myfirebaseapp.com/videos/good.mp4',
'https://myfirebaseapp.com/videos/sad.mp4'
]
var funny = items.find(x => x.endsWith('funny.mp4'));
console.log(funny);
Для вашего кода это может выглядеть примерно так:
listRef.listAll().then((res) => {
...
// Find the string that ends with 'funny.mp4'.
var funnyItem = res.items.find(x => x.fullPath.endsWith('funny.mp4'));
if(funnyItem) {
// The item we want was found. Do something with it...
funnyItem.getDownloadURL().then((url) => {
console.log(`Fetching ${url}...`);
});
}
})
Приведенный выше пример будет работать, если мы не знаем местоположение funny.mp4
.Если вы точно знаете, что местоположение нужного вам предмета всегда будет равно 2, то вы могли бы уйти с этим:
listRef.listAll().then((res) => {
...
res.items[2].getDownloadURL().then((url) => {
console.log(`Fetching ${url}...`);
});
})
Если вам действительно просто нуженколлекция URL-адресов для загрузки (трудно определить по вашему вопросу), затем вы можете проецировать массив элементов с помощью функции map
следующим образом:
listRef.listAll().then(async (res) => {
...
var urls = await res.items.map(async x => Promise.all(await x.getDownloadURL()));
console.log(`Fetching ${urls[2]}...`);
})
Имейте в виду, что это вызовет ожидаемое getDownloadURL()
метод для каждого элемента, что, вероятно, нежелательно.