Professional Professional
Мудрец
(15955)
1 год назад
Проблема, которую вы описываете, связана с асинхронной природой промисов в JavaScript. При использовании промисов и функции `.then()`, код внутри `.then()` выполняется асинхронно после завершения промиса.
В вашем втором примере, когда вы вызываете `console.log(username)` сразу после вызова `findUserName()`, код внутри `.then()` еще не выполнился, поэтому значение переменной `username` все еще равно `undefined`. Когда `console.log()` выполняется, промис еще не завершился, и поэтому вы видите вывод `Promise { <pending> }`.
Для получения ожидаемого результата, вам нужно выполнить `console.log(username)` внутри блока `.then()`, чтобы убедиться, что вывод происходит после завершения промиса и присваивания значения переменной `username`. Например:
```javascript
let username;
findUserName(username, password).then(result => {
username = result;
console.log(username);
});
```
Таким образом, `console.log(username)` будет вызван после того, как значение переменной `username` будет установлено в результат промиса.
Дмитрий
Знаток
(429)
1 год назад
Добрый день, код отрабатывает в том порядке, в котором написан, и в момент вывода username в консоль действительно все еще происходит pending. Добавьте перед промисом оператор await
В данном случае все работает прекрасно, в консоль выводится то что мне надо.
Однако если код будет таким то в консоль выведется: Promise { <pending> }.
Почему? Ведь .then() Выполняется уже после того, как промис выполнится