Хранить в хранилище и хранить URL в переменной - PullRequest
0 голосов
/ 23 марта 2020

Я новичок в Javascript.

Все, что я хочу сделать, это сохранить файл в Firestorage, а затем сохранить URL-ссылку в переменной. Однако сейчас URL не сохраняется, а моя переменная пуста.

const pictureUrl = ''

// Upload picture part
   var refname = 'profile_pictures/' + "Picture" + "_" + "Name";
   let storageRef = firebase.storage().ref(refname);
   let firstFile = document.getElementById("pictureImported").files[0]
   let uploadTask = storageRef.put(firstFile).then(function(fileSnapshot) {
   fileSnapshot.ref.getDownloadURL().then(url => pictureUrl = url)
})

console.log(pictureUrl);

console.log содержит пустую строку. Что я должен сделать, чтобы действительно сохранить URL?

1 Ответ

2 голосов
/ 23 марта 2020

pictureUrl будет иметь значение только внутри then(), поскольку getDownloadUrl() является асинхронным. Если вы хотите использовать pictureUrl вне метода then(), выполните следующие действия:

function storeImage(firstFile){
 return new Promise((resolve, reject) => {
  let uploadTask = storageRef.put(firstFile).then((fileSnapshot)=> {
   fileSnapshot.ref.getDownloadURL().then(url => {
   pictureUrl = url;
   resolve(pictureUrl);
     });
   });
}

Затем для доступа к url вы можете сделать:

storageImage(file).then((value) => {
  console.log(value);
});

Проверьте здесь для получения дополнительной информации:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...