Узел JS поток с массивом - PullRequest
0 голосов
/ 17 мая 2019

Первый раз использую потоки узлов, и я пытаюсь передать массив в Алголию.Предоставленный Algolia пример использует файл json.https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/how-to/sending-records-in-batches/?language=javascript#example

Я попытался структурировать массив, а затем использовать его, как описано в примере с Алголией.Я не уверен, что лучший способ сделать это.Должен ли я выполнять строковый массив или мне нужно перебирать массив и помещать его в поток?Последний подход все еще использует fs?Это будет выполняться для функций firebase, поэтому существует ограничение ресурса.

const algoliasearch = require('algoliasearch')
const fs = require('fs');
const StreamArray = require('stream-json/streamers/StreamArray');

const client = algoliasearch('999999', '999999');
//const index = client.initIndex('d_DASH');
const index = client.initIndex('t_DASH');



exports.dashStream = async function (listings) {
    let jsdoc = JSON.stringify(listings);
    const stream = fs.createReadStream(jsdoc).pipe(StreamArray.withParser());


    let chunks = [];
    stream
        .on('data', ({ value }) => {
            console.log("on data...")
            chunks.push(value);
            if (chunks.length === 10000) {
                stream.pause();
                index
                    .saveObjects(chunks)
                    .then(res => {
                        chunks = [];
                        stream.resume();
                    })
                    .catch(err => console.error(err));
            }
        })
        .on('end', () => {
            console.log("on end...")
            if (chunks.length) {
                console.log(`stream over?`)
                index.saveObjects(chunks,function (err, content){
                    return content.taskID.toString();
                })
                .catch(err => console.error(err));
            }
        })
        .on('error', err => console.error(err));
}

Код должен завершить запись в Algolia и вернуть идентификатор задачи из ответа Algolia.

...