|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
Добрый день. Подскажите, есть ли возможность передать значение с ас.функции переменной с помощью return. Чтоб выполнение скрипта пристанавливалось до пооучения значения. Var v; v= func(). Alert(v). (вывод значения). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 10:42 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
Lemkoleg, Код: javascript 1. 2. 3. 4. 5. 6. 7. 8.
mycall тоже должна быть объявлена, как async. Только в async функциях можно использовать await Этот пример эквивалентен коду без aync/await Код: javascript 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 11:54 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 11:59 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
voraa, Это я знаю. Проблема в том, что переменная v не получит значения. Мне нужно имеенно присвоитт значение ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 12:15 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
Lemkoleg voraa, Это я знаю. Проблема в том, что переменная v не получит значения. Мне нужно имеенно присвоитт значение В основном потоке ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 12:17 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
Lemkoleg, Если функция ассинхронная, то как вы присвоите что то. В любом случае надо ждать, пока она не завершится. await как раз и ждет. let newvalue = await myfunc (10); await ждет окончания работы myfunc (10), потом присваивает полученное значение (именно значение, с которым разрешился Промис, а не сам промис) в переменную newvalue ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 12:21 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
voraa Lemkoleg, Если функция ассинхронная, то как вы присвоите что то. В любом случае надо ждать, пока она не завершится. await как раз и ждет. let newvalue = await myfunc (10); await ждет окончания работы myfunc (10), потом присваивает полученное значение (именно значение, с которым разрешился Промис, а не сам промис) в переменную newvalue nevalue - локальная переменная. А мне нужно присвоить значение глобальной v. Причем рамки такие, что результат вычисляется в async. По-этому пытаюсь найти выход. Но, это не выход ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 17:47 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
Lemkoleg, А какая разница локальная она или нет? Просто присвоение будет выполнено только после того, как завершится асинхронная функция. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 18:53 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
voraa, Как мне ее использовать в другой функции? Например, если это промежуточный результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 19:43 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
Lemkoleg, Ну есть определенные технологии и правила программирования асинхронных операций. Нужно им следовать. Нужно ждать окончания операции и только после этого использовать полученный результат Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Любая функция, которая выдает или использует (с помощью await) асинхронные операции, должны быть объявлены, как async. Если это не нравится, все можно оформлять через Promise и then, куда загонять все операции. Иногда это удобнее, особенно, если надо часто обрабатывать ошибки, но ясность кода пропадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 21:17 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
voraa, Понял, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 21:41 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
voraa, А есть что-нибудь очереди, откуда поток может ждать данные, пока они там не появятся? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 21:43 |
|
Получение результата из асинхронной функции
|
|||
---|---|---|---|
#18+
Lemkoleg, Javascript - однопоточный по сути. Если и есть какие то асинхронные операции, то они выполняются не самим интерпретатором, а всякими API (типа fetch или filereader). Поток Javascript никогда не ждет. Он запускает асинхронную функцию API и идет дальше. Он просто предоставляет API функцию обратного вызова - когда закончишь, вызови эту функцию. Как предоставляет, не суть. Это может быть непосредственное предоставление, как у XMLHttpRequest, или через событие, как у filereader, или через Promise, как у fetch. Смысл один - поток ждать не будет, а когда асинхронная операция закончится - будет вызвана предоставленная функция. Исключение только синхронный XMLHttpRequest. Но при этом поток полностью блокируется и не реагирует ни на что. Ни на действия пользователя, ни на другие события. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 22:26 |
|
|
start [/forum/topic.php?fid=22&fpage=10&tid=1443511]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 163ms |
0 / 0 |