Firebase存储无声地失败?

时间:2016-09-16 17:23:59

标签: javascript firebase firebase-storage

我试图获取多个图片的下载网址,然后触发我的应用中的更改。但是......如果其中一个图像由于某种原因而不存在,那么一切都会无声地失败。

以下是代码:

const promises = [];

snapshot.forEach(childSnapshot => {
  const child = childSnapshot.val();
  const promise = firebase.storage()
    .ref(child.songImagePath)
    .getDownloadURL()
    .catch(err => {
      console.log('caught', err);
      return "";
    })
    .then(imageURL => {
      return imageURL;
    });

  promises.push(promise);
});

Promise.all(promises)
  .catch(err => {
    console.log('caught', err);
  })
  .then(urls => {
    ...do something with urls array
  });

我在数据库中使用child.songImagePath将图片的位置存储在存储中。如果所有图像的所有路径都有图像,那么一切都很完美。

但是如果上传出错或由于某种原因在存储位置没有图片,则会无声地失败。我的catch都没有发射。并且Promise.all永远不会被解决。

这里发生了什么?有没有办法在调用getDownloadURL之前检查文件是否存在?

编辑:正如@mjr指出的那样,在文档中他们将错误回调的格式与我的略有不同。不过,这似乎永远不会引发错误:

.then(
    imageURL => {
        return imageURL;
    },
    err => {
        console.log('caught', err);
        return "";
    }
);

1 个答案:

答案 0 :(得分:0)

Firebase Storage JS dev。

我在Chrome和React Native中稍加修改[1]运行了您的代码,并没有看到这种行为。

我看到Promise.all总是解析(永远不会失败),数组中的空字符串表示无效文件。这是因为isprime-p的{​​{1}}处理程序返回一个空字符串。

要进一步排查故障,了解一下会很有用:

  • 您正在使用的firebase JS库的版本
  • 浏览器/环境和版本
  • 网络日志,例如来自Chrome开发工具中的网络面板,或其他浏览器的类似网络

firebase-talk Google群组往往更适合开放式故障排除,而且来回更多。

[1]作为参考,这是我的代码:

.catch