Ожидание выполнения в JavaScript

Wide

Client
Регистрация
04.02.2013
Сообщения
944
Благодарностей
252
Баллы
63
Есть следующий код на js:
JavaScript:
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

const stringToSend = "0123456789012345678001234567890";
const chunksToSend = Array.from(stringToSend); // Разбиваем строку на отдельные символы

const stream = new ReadableStream({
  async start(controller) {
    for(const chunk of chunksToSend) {
      await delay(1000);
      controller.enqueue(chunk);
    }
    controller.close();
  }
});

(async function() {
  try {
    const response = await fetch('https://test.com', {
      method: 'POST',
      body: stream.pipeThrough(new TextEncoderStream()),
      headers: {'Content-Type': 'text/plain'},
      duplex: 'half',
    });

    const text = await response.text();
    console.log('Response:', text);
  } catch (error) {
    console.error('Error:', error);
  }
})();
В данном случае код выполняется 30 секунд, но в кубике он выполняется мгновенно. обертывание в
JavaScript:
async function someAsyncFunction() {
    /*Place your code here*/
}
someAsyncFunction()
не помогает, чатжп советует добавить setTimeout
JavaScript:
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

const stringToSend = "0123456789012345678001234567890";
const chunksToSend = Array.from(stringToSend); // Разбиваем строку на отдельные символы

const stream = new ReadableStream({
  async start(controller) {
    for(const chunk of chunksToSend) {
      await delay(1000);
      controller.enqueue(chunk);
    }
    controller.close();
  }
});

(async function() {
  try {
    const response = await fetch('https://test.com', {
      method: 'POST',
      body: stream.pipeThrough(new TextEncoderStream()),
      headers: {'Content-Type': 'text/plain'},
      duplex: 'half',
    });

    const text = await response.text();
    console.log('Response:', text);
  } catch (error) {
    console.error('Error:', error);
  }
})();
что тоже не сильно помогает. Парни, подскажите как правильно реализовать ожидание выполнения кода.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
794
Благодарностей
814
Баллы
93
P.S. Я тоже хреново разбираюсь в js, выскажу своё мнение

На самом деле этот код всё также выполняется 30 сек, вот только сам кубик js этого не ждёт
112427

Насколько я понял, в кубике js вообще в принципе невозможно никакое ожидание, т.е. всё будет асинхронно.

1) можно попробовать выполнять через "запуск программы" используя node.js.
2) можно попробовать
  • выбрать на странице тэг и очистить его (назовем его result)
  • выполнить js код и положить результат в result
  • после выполнения кубика js ожидать появления результата в result с помощью обычного цикла
пример кода (я не смог его проверить, т.к. вы дали "абстрактный" код)
JavaScript:
//очищаем место, куда положим результат
var result = document.querySelector('h1');
result.innerText = '';

//наш код, выполняемый 30 секунд
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

const stringToSend = "0123456789012345678001234567890";
const chunksToSend = Array.from(stringToSend); // Разбиваем строку на отдельные символы

const stream = new ReadableStream({
  async start(controller) {
    for(const chunk of chunksToSend) {
      await delay(1000);
      controller.enqueue(chunk);
    }
    controller.close();
  }
});

(async function() {
  try {
    const response = await fetch('https://test.com', {
      method: 'POST',
      body: stream.pipeThrough(new TextEncoderStream()),
      headers: {'Content-Type': 'text/plain'},
      duplex: 'half',
    });

    //спустя 30 сек результат ляжет в отобранный нами тэг на стр
    const text = await response.text();
    result.InnerText = text;
    console.log('Response:', text);
  } catch (error) {
      result.InnerText = error;
    console.error('Error:', error);
  }
})();
 
Последнее редактирование:
  • Спасибо
Реакции: Wide

Wide

Client
Регистрация
04.02.2013
Сообщения
944
Благодарностей
252
Баллы
63
На самом деле этот код всё также выполняется 30 сек, вот только сам кубик js этого не ждёт
Да, вот именно, а мне нужно ожидание.
после выполнения кубика js ожидать появления результата в result с помощью обычного цикла
В другом коде я также реализовал, через тег на странице, и в цикле обращаюсь к странице, но это же костыльно.
можно попробовать выполнять через "запуск программы" используя node.js.
Мне нужно запрос выполнить на странице которой нахожусь, иначе нужно передавать куки прокси и все дела.
Насколько я понял, в кубике js вообще в принципе невозможно никакое ожидание, т.е. всё будет асинхронно.
У меня был код в котором было ожидание, но у меня дебильная привычка очищать вкладки в нотепад++ и теперь не могу заставить чатжпт повторить этот код.
 

Wide

Client
Регистрация
04.02.2013
Сообщения
944
Благодарностей
252
Баллы
63
Парни, крик помощи. Я точно знаю что проблема решаема, помогите кто сталкивался с подобной задачей.
 

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 053
Баллы
93
У меня был код в котором было ожидание
Если найдёшь - дай знать, интересно)
Когда надо подождать, я обычно результат писал в глобальный объект window.result = someResult. Затем забирал оттуда через сколько надо. Если по анонимности не бьёт, то сойдёт. Если бьёт, можно и в другое менее очевидное место что-то записывать
 
  • Спасибо
Реакции: volody00

SoUp1

Client
Регистрация
15.09.2013
Сообщения
134
Благодарностей
41
Баллы
28
Кто-то нашел способ как заставить кубик JavaScript ждать выполнения кода?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)