Давайте немного объясним, что происходит в функции async
.
Во-первых, все асинхронные функции возвращают обещание.Всегда.Вам всегда нужно будет использовать .then()
или await
, чтобы получить значение из возвращенного обещания.
Во-вторых, вот последовательность событий в вашей функции.
- Вы вызываете
checkValue(...)
и передать его аргументы. - Первая строка выполняет
await getValue()
. - Это вызывает
getValue()
и получает обещание обратно. - Поскольку вы делаете
await
, он приостанавливает дальнейшее выполнение функции и, в этот момент времени,Функция возвращает неразрешенное обещание. - Это неразрешенное обещание - это то, на что вы смотрите.
- Между тем, остальная часть вашего кода после вызова
getValue()
продолжает выполняться. - Некоторое время спустя, когда интерпретатор JS завершит работу над тем, что делал, и перейдет в очередь событий для следующего события, он найдет событие, которое приведет к
getValue()
разрешению его обещания. - В этот моментразрешенное значение из обещания
getValue()
присваивается вашей переменной json
, и выполнение функции checkValue()
приостанавливается и продолжается. - Затем, в зависимости от значений в цикле
for
, ваша функция завершит работу, вернув разрешенное обещание.Обратите внимание, что нет причин делать return Promise.resolve(true)
или return Promise.resolve(false)
.Просто return true
или return value
- это все, что требуется.Независимо от значения return
из функции async
становится разрешенным значением обещания, которое уже было возвращено из этой функции.Переводчик сделает это за вас.
Я пытался использовать Promise.resolve () для обработки возвращенного значения Promise, но я все еще получаю Promise { <pending> }
return.Почему это происходит?
Во-первых, вы получаете обещание, потому что все функции async
возвращают обещание.
Во-вторых, оно не решено в тот момент, когда вы его проверяете, потому что функция былаприостановлено в первый await
, и именно тогда функция async
фактически вернула обещание, и в этот момент она не решена, поскольку функция еще не завершила выполнение (из-за await
).См. Шаг 4 выше.