如何将 Firebase Cloud Storage 中返回项目的 URL 推送到 Angular 中的数组中?
Posted
技术标签:
【中文标题】如何将 Firebase Cloud Storage 中返回项目的 URL 推送到 Angular 中的数组中?【英文标题】:How can I push URLs of returned items from Firebase Cloud Storage into an array in Angular? 【发布时间】:2020-10-07 03:03:28 【问题描述】:目标:
目标是使用 listAll()
返回存储在 Firebase 存储桶中的图像,然后使用 getDownloadURL()
获取它们的 URL,并将每个 URL 推送到将用于在图库中显示图像的数组。
问题:
我成功返回了 URL,但我收到了这个错误:TypeError: "_this is undefined"
当我尝试将它们推送到一个空数组时。
我做了什么: 在过去的 3 天里,我尝试了几种方法,这是我能想到的最好的方法:
声明一个空数组:export class imgService
public images = []
方法:
//creating a reference
var itemsRef = firebase.storage().ref().child('images/');
// listing the images
itemsRef.listAll().then(function (result)
result.items.forEach(function (itemRef)
// getting the URLs of the images
itemRef.getDownloadURL().then(downloadURL =>
console.log('URL:' + downloadURL);
// pushing URLs to the empty images array
this.images.push(downloadURL); //PROBLEM OCCURS HERE
).catch(function (error)
//Handling error here
);
);
).catch(function (error)
//Handling error here
);
我对这一切都很陌生,只是想学习网络技术,所以请放轻松。 谢谢
【问题讨论】:
【参考方案1】:看起来问题在于理解“this”在 js 中的工作原理。 如mozilla website 所述,有两种方法可以解决您面临的问题。
首先确定问题:
在大多数情况下,this 的值取决于函数的调用方式(运行时绑定)。执行时不能通过赋值来设置,每次调用函数时可能都不一样。
在当前上下文中,通过定义一个常规函数来处理listAll().then
和result.items.forEach
,您将失去对“this”的引用。
然后看看可能的解决方案:
ES5 引入了 bind() 方法来设置函数 this 的值 不管怎么调用,ES2015引入了箭头函数 不提供自己的 this 绑定(它保留 this 值 封闭的词汇上下文)。
所以我们可以将bind 明确表示为您的意思的“this”,或者使用arrow functions 将其全部传递下去。在这种情况下,我个人偏好使用箭头符号,因此以下代码应该可以工作。
希望这能解决您的问题并帮助您了解根本问题。
//creating a reference
var itemsRef = firebase.storage().ref().child('images/');
// listing the images
itemsRef.listAll().then((result) =>
result.items.forEach((itemRef) =>
// getting the URLs of the images
itemRef.getDownloadURL().then(downloadURL =>
console.log('URL:' + downloadURL);
// pushing URLs to the empty images array
this.images.push(downloadURL); //PROBLEM OCCURS HERE
).catch(function (error)
//Handling error here
);
);
).catch(function (error)
//Handling error here
);
【讨论】:
以上是关于如何将 Firebase Cloud Storage 中返回项目的 URL 推送到 Angular 中的数组中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将来自不同组件的 firebase auth 和 Cloud Firestore 用作单个 Firebase 应用程序
如何将应用环境变量用于 Firebase Cloud Functions?
如何将子集合添加到 Firebase Cloud Firestore 中的文档
如何将 CSV 或 JSON 导入到 Firebase Cloud Firestore
如何将多个(不同)文件上传到 Cloud Storage Firebase?
如何使用 Cloud Function 将数据从 Firebase Firestore 索引到 Elastic App Search?