...

Сохранение большого количества элементов

Тема в разделе "Скрипты и разработка", создана пользователем nazarov, 25 июн 2023.

  1. nazarov

    nazarov Активный участник

    Пачками по 30 элементов, всего 1700

    проверено на таком количестве

    Код:
    
    let promises: Promise[] = [];

    for (
    let lead of allLeads) {

            
    lead.data.__directory.id = 'd4a2437a-f097-4496-b938-9e66223827fc';

            
    promises.push(lead.save())

            if(
    promises.length >= 30) {

                
    await Promise.all(promises);

                
    promises = []

            }

        };
  2. grylev

    grylev Участник

    Какие показатели по времени выполнения? Характеристики кластера Postgre?
  3. dm.nikitin

    dm.nikitin Новичок

    Написал более универсальную версию кода

    Код:
    
    async function callFuncForArray<V, K>(items: V[], func: (item: V) => Promise<K>): Promise<K[]> {
        
    let promises: Promise<K>[] = [];
        const 
    responses: K[] = [];

        for (
    let item of items) {
            
    promises.push(func(item));

            if (
    promises.length >= 30) {
                const 
    res = await Promise.all(promises);
                
    responses.push(...res);
                
    promises = []
            }
        };

        if (
    promises.length > 0) {
            const 
    res = await Promise.all(promises);
            
    responses.push(...res);
        }

        return 
    responses;
    }
    Пример применения:
    Код:
    
    const updated_items = await callFuncForArray(items, async current_item => {
            
    current_item.data.storage = "Test";
            
    await current_item.save();

            
    await current_item.setStatus(current_item.fields.__status.variants.archive);

            return 
    current_item;
        })