13 / 13 / 2
Регистрация: 22.04.2010
Сообщений: 623
1

Использование данных вне функции после её выполнения

17.02.2018, 20:41. Показов 370. Ответов 4
Метки нет (Все метки)

Как во втором выводе получить результат вне самой функции, которая выполняется http.onload = function(e).
Javascript
1
2
3
4
5
6
7
const http = new XMLHttpRequest();
http.open("GET", "https://ya.ru/index.php",true);
http.send();
http.onload = function(e){
    console.log(http.status);//выводит как положено
}
console.log(http.status);//выводит 0 т.е. неверный результат
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2018, 20:41
Ответы с готовыми решениями:

Использование данных из БД вне цикла
Приветствую, уважаемые программисты. Такая проблема: $result = mysql_query("SELECT * FROM...

После выполнения функции, приложение зависает.
После выполнения функции, приложение зависает. Либо уходить в бесконечный цикл, процессор...

Hover активен после выполнения функции
Добрый день. Вот мой крипт: hhttp://jsfiddle.net/962yxny6/4/ Если нажать на копку "Развернуть" и...

Удаляется string после выполнения функции
Всем привет. Я начинающий в языке C++ и поэтому прошу помощи. У меня внутри функции создается...

4
706 / 308 / 191
Регистрация: 05.03.2015
Сообщений: 822
17.02.2018, 23:44 2
koc94ok, вы не поняли сути асинхронности.
Ваш второй вывод не ждет пока выполнится запрос, поэтому всегда будет выдавать статус 0.

Если вы хотите использовать данные вне колбека (там где первый вывод) - запишите их в глобальную переменную, например так:

Javascript
1
2
3
4
5
6
7
8
9
10
let data;
const http = new XMLHttpRequest();
http.open("GET", "https://ya.ru/index.php",true);
http.send();
http.onload = function(e){
data = http.response;
    console.log(http.status);//выводит как положено
}
 
console.log(data) // здесь по-прежнему будет не то, что вы ожидаете (undefined)
0
13 / 13 / 2
Регистрация: 22.04.2010
Сообщений: 623
18.02.2018, 14:09  [ТС] 3
msheal, Хорошо, я уже сделал все через async/await и promise, как прервать выполнение асинхронной функции?
Выполнения асинхронной функции наматываются друг на друга и получается каша.
0
706 / 308 / 191
Регистрация: 05.03.2015
Сообщений: 822
18.02.2018, 17:06 4
Цитата Сообщение от koc94ok Посмотреть сообщение
как прервать выполнение асинхронной функции
Конкретно xhr запрос прерывается xhr.abort(), фетч запрос сложнее, с помощью AbortController

Цитата Сообщение от koc94ok Посмотреть сообщение
Выполнения асинхронной функции наматываются друг на друга и получается каша
будет каша или нет - зависит лишь от разработчика. Я не имею ни малейшего понятия как выглядит ваш код
0
13 / 13 / 2
Регистрация: 22.04.2010
Сообщений: 623
18.02.2018, 18:10  [ТС] 5
msheal,

Код упростил до самого необходимого:

Суть в том, что одновременно должна быть запущена всего одна функция play().
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function quest() 
{
        return new Promise(resolve => {
        const http = new XMLHttpRequest();
        http.open("GET", "https://ya.ru/index.php",true);
        http.send();
        http.timeout = 60000; 
                http.ontimeout = function () { }
        http.onload = () => resolve(http);
    });
}
 
async function play() 
{
    myjson = await quest(); //получаем новый результат
                            setTimeout(function() 
                        {
                            //делаем что-то
                                                        setTimeout(function() 
                                {
                                  //делаем что-то
                                                              play();
                                }, 20000);
                        }, 20000);
}
setInterval( function() { play(); } , 5000);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2018, 18:10

Остановка после выполнения функции stop
почему, когда запускаешь start(), циклит start() stop() start() stop() и т.д.. он же должен...

Пропадает hover после выполнения функции
Здравствуйте. Я задаю параметры для наведения в css, но после выполнения функции они пропадают. ...

Запуск функции после выполнения обновления связей
Подскажите, пожалуйста, как после выполнения команды меню 'Правка-Связи-Обновить(Изменить)'...

Css перестает работать после выполнения функции
Здравствуйте. Встала у меня такая проблемка. Есть у меня такой кусочек css .buttons {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru