обновление photoURL пользователя путем доступа из хранилища Firebase - PullRequest
0 голосов
/ 22 февраля 2020

Я использую этот код javascript для загрузки изображения в хранилище FireBase, затем я хочу обновить URL-адрес этого изображения до photoURL пользователя (аутентификация Firebase)

const fileButton = document.querySelector('#fileButton');
var imageURL;

fileButton.addEventListener('change', function(e) {
    //get file 
    var file = e.target.files[0];
    //create a storage reference
    var storageRef = storage.ref('profilePictures/' + userUID + '.jpg');
    //upload file
    var task = storageRef.put(file);
    //update progress bar
    task.on('state_changed',
        function progress(snapshot){

        },
        function error(err) {

        },
        function complete(){
            storageRef.getDownloadURL().then(function(url) {
                console.log(url);
                imageURL = url;
            })
            .catch(function(error) {
                // Handle any errors
                console.log(error);
            });
            // window.location.replace('/profile');
            var user = auth.currentUser;
            user.updateProfile({
                photoURL: imageURL
            })
            .then(function() {
                // Update successful.
                console.log(user);
            })
            .catch(function(error) {
                // An error happened.
                console.log(error);
            });
        }
    );
});

Загрузка изображения в хранилище успешно но photoURL в пользовательских данных НЕ УСПЕШНО

uid: "t2TbJS6ut7NZH4UU8HeAVarGPOw2"
displayName: "Sachin Kumar"
photoURL: null
email: "s@gmail.com"
emailVerified: false

что я делаю неправильно

1 Ответ

0 голосов
/ 22 февраля 2020

Вам нужно подождать, пока storageRef.getDownloadURL() завершится sh, прежде чем передать его user.updateProfile, например:

function complete() {
  storageRef.getDownloadURL().then(function(url) {
      console.log(url);
      imageURL = url;

      // Now you have valid `imageURL` from async call
      var user = auth.currentUser;
      user.updateProfile({ photoURL: imageURL })
        .then(function() { console.log(user) })
        .catch(function(error) { console.log(error) });

    })
    .catch(function(error) { console.log(error) });    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...