andrey-tech / bx24-wrapper-js

Класс-обертка для стандартной JS-библиотеки Битрикс24. Позволяет избежать ада колбеков и работать c REST API Битрикс24, используя асинхронные функции и асинхронные генераторы ECMAScript 9.
MIT License
31 stars 14 forks source link

проблемы с bx24.fetchList('catalog.product.list', params) #2

Closed AlexandreZaytsev closed 1 year ago

AlexandreZaytsev commented 1 year ago

добрый день, не подскажите, никак не могу запустить bx24.fetchList конкретно для catalog.product.list первая пачка поступает и потом сразу ошибка (возможно только для этого запроса)

(async () => {
    let bx24 = new BX24Wrapper();

    // Устанавливаем собственную функцию для вывода в веб-консоль прогресса выполнения запросов в процентах
    bx24.progress = percent => console.log(`progress: ${percent}%`);

    let params = {
            filter: { iblockId: 21},//,id: 10093 },
            select: [ 'id', 'iblockId']
    };

/*
    // Загружаем список всех товаров в заданном товарном каталоге
    let products = await bx24.callListMethod('catalog.product.list', params);
    for (let product of products) {
        console.log('Product:', product);
    }
*/
    // Загружаем список всех товаров в заданном товарном каталоге используя асинхронный генератор
    let generator = bx24.fetchList('catalog.product.list', params);
    for await (let products of generator) {
        for (let product of products) {
            console.log('Product:', product);
        }
    }

})().catch(error => console.log('Error:', error));

после первого шага bx24.progress = percent выдает [Nan ](progress: NaN%) и дальше при попытке итерации for (let product of products) { сообщение Error: TypeError: products is not iterable ps ...может в этом проблема что этот итератор синхронный? или https://spec-zone.ru/javascript/errors/is_not_iterable в общем - не разбираюсь в этом

картинка (хром)

1 3 если тоже самое делаем для запроса crm.product.list - все работает

    params = {
        filter: { CATALOD_ID: 21 },
        select: [ 'ID', 'ACTIVE', 'NAME','ID', 'PRICE', 'CURRENCY_ID', 'VAT_ID', 'VAT_INCLUDED', 'UF_*' ]
                };

на входе такой же массив - отличие только в том что значения в кавычках приходят 2

AlexandreZaytsev commented 1 year ago

хотя вроде и запрос нормальный и у народа на php вроде работает https://web-tolk.ru/blog/kak-poluchit-tseny-i-ostatki-tovarov-iz-tovarnogo-kataloga-bitriks-24-po-rest-api.html https://web-tolk.ru/blog/kak-poluchit-tseny-i-ostatki-variatsij-tovarov-iz-tovarnogo-kataloga-bitriks-24-po-rest-api.html https://dev.1c-bitrix.ru/rest_help/catalog/product/catalog_product_list.php

но хотел на вашей js библиотеке (не очень в этом разбираюсь - в асинхронности) задача простая - выгружаю номенклатуру из 1С УТ11 в Б24, потом нужно пробежать по каталогу Б24 - почистить наименования (приходят грязные = 'название товара(название торгового предложения)' вариации)+разобрать цены (у меня приходят 6 видов цен) и самую свежую поставить в базовую Б24 (с конвертацией если в валюте)+поставить активен товар или нет в cms битрикс у меня все работает - сейчас внедряем Б24 (облачный) переношу обработку в него... ps просто какая то проблема в их структуре - торговый каталог crm и товарный каталог catalog на инфоблоках... все намешано одно на другое... подскажите - может где в синтаксисе что то не то или...

andrey-tech commented 1 year ago

Добрый день!

Попробуйте, в данном случае, отказаться от использования метода fetchList(), использующего асинхронный генератор, в пользу более простого метода callListMethod():

    let products = await bx24.callListMethod('catalog.product.list', params);
    for (let product of products) {
        console.log('Product:', product);
    }
andrey-tech commented 1 year ago

В отсутствие, в разумные строки, обратной связи закрываю данный issue.