powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Получение результата из асинхронной функции
14 сообщений из 14, страница 1 из 1
Получение результата из асинхронной функции
    #39934494
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Подскажите, есть ли возможность передать значение с ас.функции переменной с помощью return. Чтоб выполнение скрипта пристанавливалось до пооучения значения.
Var v;
v= func().
Alert(v). (вывод значения).
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934564
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lemkoleg,

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
async function myfunc (value) {
    return value+5;
}

async function mycall () {
  let newvalue = await myfunc (10);
  console.log (newvalue) ;  // -> 15
}



mycall тоже должна быть объявлена, как async. Только в async функциях можно использовать await

Этот пример эквивалентен коду без aync/await

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function myfunc (value) {
    return new Promise.resolve(value+5);
}

function mycall () {
  let newvalue = myfunc (10);
  newvalue.then ((v) => console.log (v) );  // -> 15
}
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934568
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkoleg,
вроде хорошо описано
https://habr.com/ru/post/491012/
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934574
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa,
Это я знаю. Проблема в том, что переменная v не получит значения. Мне нужно имеенно присвоитт значение
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934578
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkoleg
voraa,
Это я знаю. Проблема в том, что переменная v не получит значения. Мне нужно имеенно присвоитт значение

В основном потоке
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934581
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lemkoleg,
Если функция ассинхронная, то как вы присвоите что то. В любом случае надо ждать, пока она не завершится.
await как раз и ждет.

let newvalue = await myfunc (10);

await ждет окончания работы myfunc (10), потом присваивает полученное значение (именно значение, с которым разрешился Промис, а не сам промис) в переменную newvalue
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934840
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa
Lemkoleg,
Если функция ассинхронная, то как вы присвоите что то. В любом случае надо ждать, пока она не завершится.
await как раз и ждет.

let newvalue = await myfunc (10);

await ждет окончания работы myfunc (10), потом присваивает полученное значение (именно значение, с которым разрешился Промис, а не сам промис) в переменную newvalue

nevalue - локальная переменная. А мне нужно присвоить значение глобальной v. Причем рамки такие, что результат вычисляется в async. По-этому пытаюсь найти выход. Но, это не выход
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934877
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lemkoleg,

А какая разница локальная она или нет?
Просто присвоение будет выполнено только после того, как завершится асинхронная функция.
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934904
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa,
Как мне ее использовать в другой функции? Например, если это промежуточный результат.
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934937
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lemkoleg,
Ну есть определенные технологии и правила программирования асинхронных операций.
Нужно им следовать.
Нужно ждать окончания операции и только после этого использовать полученный результат

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var v;

async function myfunc (value) {
    return value+5;
}

async function mycall () {
 v = await myfunc (10);
}

//где то дальше

await mycall ()
// теперь можно использовать v
console.log (v)



Любая функция, которая выдает или использует (с помощью await) асинхронные операции, должны быть объявлены, как async.

Если это не нравится, все можно оформлять через Promise и then, куда загонять все операции. Иногда это удобнее, особенно, если надо часто обрабатывать ошибки, но ясность кода пропадает.
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934942
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa,
Понял, спасибо
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934943
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa,
А есть что-нибудь очереди, откуда поток может ждать данные, пока они там не появятся?
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39934949
voraa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lemkoleg,

Javascript - однопоточный по сути. Если и есть какие то асинхронные операции, то они выполняются не самим интерпретатором, а всякими API (типа fetch или filereader). Поток Javascript никогда не ждет. Он запускает асинхронную функцию API и идет дальше. Он просто предоставляет API функцию обратного вызова - когда закончишь, вызови эту функцию. Как предоставляет, не суть. Это может быть непосредственное предоставление, как у XMLHttpRequest, или через событие, как у filereader, или через Promise, как у fetch.
Смысл один - поток ждать не будет, а когда асинхронная операция закончится - будет вызвана предоставленная функция.
Исключение только синхронный XMLHttpRequest. Но при этом поток полностью блокируется и не реагирует ни на что. Ни на действия пользователя, ни на другие события.
...
Рейтинг: 0 / 0
Получение результата из асинхронной функции
    #39935160
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa,
Спасибо
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Получение результата из асинхронной функции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]