无法将Firebase存储下载URL传递到接口属性

时间:2020-07-01 04:22:59

标签: javascript angular firebase google-cloud-firestore

我正在将文件上传到Firebase存储。然后我得到的文件URL如下

        snapshot.ref.getDownloadURL().then(function(rawFileURL) {
        console.log("File available at", rawFileURL);
        this.downloadURL = rawFileURL;
        });

现在,我正在尝试将此属性传递给要提交到Firestore文档的接口。这样。


    let sData: Data = {
      rawfilepath: this.downloadURL, // I also tried passing rawFileURL
      //rawfilepath: audioImagesRef.toString(),
      readyfilepath: "",
      teller: form.value.steller,
      title: form.value.stitle,
      userid: uid,
    }

将接口属性提交到Firestore时出现以下错误

ERROR FirebaseError:函数DocumentReference.set()用无效数据调用。不支持的字段值:未定义(在字段rawfilepath中找到)

如果我将普通字符串“”或说user.id传递给接口,则可以正常工作。但是,当我尝试将downloadURL存储在rawfilepath中时,它会出错。

任何帮助将不胜感激。预先感谢

2 个答案:

答案 0 :(得分:1)

尽管很难看到可用数据的问题,但是可以安全地假设在分配this.downloadURL之前先分配一个值。 snapshot.ref.getDownloadURL()返回一个诺言,该诺言不按照之前或之后的代码异步运行。

您的情况的示例用法是

let sData: Data;
    
snapshot.ref.getDownloadURL().then(function(rawFileURL) {
    sData = {
        rawfilepath: rawFileURL,
        readyfilepath: "",
        teller: form.value.steller,
        title: form.value.stitle,
        userid: uid,
    }
});

答案 1 :(得分:0)

错误告诉您rawfilepath(this.downloadURL)未定义。您将必须进行一些调试以找出原因。在提供给this.downloadURL的回调中提供值之前,您似乎正在尝试使用getDownloadURL()

请记住,返回承诺的函数是异步的,并在工作完成之前立即返回。因此,您只应在回调内部内部使用this.downloadURL,或者在绝对确定回调已完成的其他时间使用