Я работаю с AWS-Amplify и хочу получить владельца из Cognito и назначить его для владельца переменной. Когда я делаю console.log(user.username) внутри then( я вижу правильные данные. Однако, когда я делаю console.log(owner); я вижу только ноль.

 function App() { // Get user let owner = null; Auth.currentAuthenticatedUser({ bypassCache: false // Optional, By default is false. If set to true, this call will send a request to Cognito to get the latest user data }) .then(user ={amp}gt; { owner = user.username; }) .catch(err ={amp}gt; console.log(err)); console.log(owner); 

Вы не хотите делать какие-либо побочные эффекты внутри тела компонента, и если вам нужно сохранить какие-то данные, которые меняются с течением времени, то место для этого.

Для побочного эффекта используйте useEffect которое можно настроить, когда вызывать функцию обратного вызова, используя массив зависимостей, который в этом случае пуст и будет запускать функцию обратного вызова только при монтировании

 function App() { const [owner, setOwner] = useState(null) useEffect(() ={amp}gt; { Auth.currentAuthenticatedUser({ bypassCache: false, }) .then((user) ={amp}gt; { setOwner(user.username) }) .catch(console.log) }, []) return {amp}lt;div{amp}gt;{owner}{amp}lt;/div{amp}gt; } 
 function App() { // Get user let owner = null; return Auth.currentAuthenticatedUser({ bypassCache: false // Optional, By default is false. If set to true, this call will send a request to Cognito to get the latest user data }) .then(user ={amp}gt; { owner = user.username; console.log(owner); return owner }) .catch(err ={amp}gt; console.log(err)); 

Поскольку Auth is async console.log (owner) выполняется до разрешения обещания. Переместите его, чтобы увидеть результат.