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

  • Автор темы Автор темы Wide
  • Дата начала Дата начала

Wide

Client
Регистрация
04.02.2013
Сообщения
970
Реакции
262
Баллы
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);
  }
})();
что тоже не сильно помогает. Парни, подскажите как правильно реализовать ожидание выполнения кода.
 
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
На самом деле этот код всё также выполняется 30 сек, вот только сам кубик js этого не ждёт
Да, вот именно, а мне нужно ожидание.
после выполнения кубика js ожидать появления результата в result с помощью обычного цикла
В другом коде я также реализовал, через тег на странице, и в цикле обращаюсь к странице, но это же костыльно.
можно попробовать выполнять через "запуск программы" используя node.js.
Мне нужно запрос выполнить на странице которой нахожусь, иначе нужно передавать куки прокси и все дела.
Насколько я понял, в кубике js вообще в принципе невозможно никакое ожидание, т.е. всё будет асинхронно.
У меня был код в котором было ожидание, но у меня дебильная привычка очищать вкладки в нотепад++ и теперь не могу заставить чатжпт повторить этот код.
 
Парни, крик помощи. Я точно знаю что проблема решаема, помогите кто сталкивался с подобной задачей.
 
У меня был код в котором было ожидание
Если найдёшь - дай знать, интересно)
Когда надо подождать, я обычно результат писал в глобальный объект window.result = someResult. Затем забирал оттуда через сколько надо. Если по анонимности не бьёт, то сойдёт. Если бьёт, можно и в другое менее очевидное место что-то записывать
 
  • Спасибо
Реакции: volody00
Кто-то нашел способ как заставить кубик JavaScript ждать выполнения кода?
 

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