Почему моя функция задержки с использованием Settimeout не работает внутри для ... петлей в асинхронной функции?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Почему моя функция задержки с использованием Settimeout не работает внутри для ... петлей в асинхронной функции?

Сообщение Anonymous »

У меня есть функция async , которая обрабатывает список контактов и взаимодействует с API bitrix24 . Я хочу ввести задержку между каждым запросом API, используя функцию задержки . Однако, когда я использую функцию задержки , она, похоже, не работает так, как ожидалось, и выполнение продолжается без ожидания.
Пример кода:
Вот моя задержка function:

Код: Выделить всё

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
< /code>
А вот моя основная функция, которая проходит через массив (data
) и обрабатывает каждый контакт с задержками:

Код: Выделить всё

const main = async () => {
for (const row of data) {
console.log("Processing:", row.number);

await delay(2000); // Introduce a 2-second delay before making API calls
console.log("Waited 2 seconds, now processing next item...");

const numberExists = await fetchContacts(row.number);
if (!numberExists) {
const createdContact = await createContactIfNotExists({
NAME: row.name,
PHONE: [{ VALUE: row.number }],
});

await delay(2000);
const createdDeal = await createDeal({
TITLE: row.name,
STAGE_ID: "C9:NEW",
CATEGORY_ID: 9,
});

await delay(2000);
await addContactsToDeal(createdDeal.data, createdContact.data);
}
}
};

main();
проблема: [/b]
  • Задержка (2000) не кажется На самом деле pause выполнение до следующей итерации.
  • Когда я заменяю его на , непосредственно возвращаемое обещание , он работает нормально:

    Код: Выделить всё

    await new Promise((resolve) => setTimeout(resolve, 2000));
    
    Но я не понимаю, почему это имеет значение.
Что я попробовал:
  • проверяется, если Doled () правильно ожидается - да, я использую await delay (2000) .
  • Зарегистрированные операторы Inside () - функция вызывается, но выполнение не пауза, как и ожидалось.
    попытался заменить на ... из с помощью foreach () loop - но foreach () не поддерживает Async/await , так что это не вариант.
Вопросы:

[*] Почему Await Dolement (2000) (используя мою функцию задержки ), не ведущий то же самое, что await wave new Promise ((Resolve) => settimeout (Resolve, 2000 )) ?
[*] Что может привести к задержке () в некоторых случаях, даже когда правильно ожидается?
< li> Есть ли лучший способ представить задержки между вызовами API в асинхронном цикле? Заранее спасибо. 🙌


Подробнее здесь: https://stackoverflow.com/questions/794 ... oops-in-an
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»