Проблема в том, что, когда imageName
не равно нулю, вы используете обещание для получения URL-адреса из firebase. Это означает, что начнется асинхронная операция (вызов firebase для URL-адреса), и когда она завершится, функция, которую вы передали в then
, будет вызываться с найденным URL-адресом.
Проблема в том, что возврат изнутри обещание не возвращает его из функции (поскольку функция уже возвращается, пока асинхронная операция выполняется в фоновом режиме.
Решение этой проблемы будет заключаться в использовании состояния для хранения URL-адреса , и обновите его из then
, когда обещание разрешится.
В этом случае вы вызовете функцию test
при монтировании компонента, и вместо того, чтобы возвращать URL-адрес, он установит его в state
.
test = (imageName) => {
if (imageName)
{
firebaseConfig.storage().ref().child(`users/${imageName}`).getDownloadURL().then(url => {
this.setState({imageUrl: url});
})
}
else{
this.setState({imageUrl: "https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"});
}
}
Тогда вы можете использовать его из state
вот так:
<Avatar src={this.state.imageUrl} />