Получение неопределенного значения вместо обещанной функции writeFile при использовании gulp. js - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь создать сборку, используя gulp , в которой также используется crawler . Во время сборки я использую функцию var {promisify} = require("util"), чтобы использовать fs.writeFile обещанным образом, чтобы я мог получить значение.

Данные регистрируются, но в конечном итоге я хотел бы записать данные в файл!

Вот настройка сканера.

const { src, watch, series, parallel, dest } = require('gulp');
var Crawler = require("crawler");

function iterObj(nestedObj) {
    // keep a list of object references to prevent circular references at any level
    let objReferences = [];

    function rHelper(obj) {
        let arr = []
        let objValues = Object.values(obj);
        // use var to avoid additonal heap overhead of new variable for each iteration
        for (var i = 0; i < objValues.length; i++) {
            let val = objValues[i];
            // check if non null and not a reference we've already seen before (AKA circular reference)
            if (val !== null && objReferences.indexOf(val) === -1) {
                if (val.src) { arr.push({ src: val.src }) }
                if (typeof val === "object" && !Array.isArray(val)) {
                    // since we're checking this object, add reference to list to make sure it doesn't get
                    // referenced by any of its children or siblings
                    objReferences.push(val);
                    arr.push(...rHelper(val));
                }
            }
        }
        return arr;
    }

    return rHelper(nestedObj);
}


var c = new Crawler({
    maxConnections: 10,
    // This will be called for each crawled page
    callback: function(error, res, done) {
        if (error) {
            console.log(error);
        } else {
            var $ = res.$;
            // $ is Cheerio by default
            //a lean implementation of core jQuery designed specifically for the server;
            var img = $(`img`);

            // add circular references for testing
            img[0].attribs.self = img[0].attribs;
            img[0].attribs.parent = img[0];
            img[0].attribs.top = img;
            img[0].next.prev = img[0].prev;
            img[0].prev.next = img[0].next;


            let data = JSON.stringify(iterObj(img));
            console.log("data in crawler ", data);
            console.log("typeof img === 'object' && !Array.isArray(img)", typeof img === "object" && !Array.isArray(img))
            return data;

        }
        done();
    }
});

module.exports = c

И это мой файл gulp:

var { src, dest, watch, series, parallel } = require('gulp');
var crawler = require('./src/crawler');
var toJSON = require('gulp-js-to-json');
var fs = require('fs');
const { promisify } = require("util");
const writeFile = promisify(fs.writeFile);


var files = {
    getJs: `src/js/**/*.js`,
    getJSON: `src/json/**/*.json`,
    toJsPath: `src/js/`,
    jsonPath: `src/json/`
}

// fetch command line arguments
const arg = (argList => {

    let arg = {},
        a, opt, thisOpt, curOpt;
    for (a = 0; a < argList.length; a++) {

        thisOpt = argList[a].trim();
        opt = thisOpt.replace(/^\-+/, '');

        if (opt === thisOpt) {

            // argument value
            if (curOpt) arg[curOpt] = opt;
            curOpt = null;

        } else {

            // argument name
            curOpt = opt;
            arg[curOpt] = true;
        }

    }

    return arg;

})(process.argv);

async function writeJS() {
    var data = crawlerTask();
    await writeFile(`${files.toJsPath}/${arg.name}.js`, data);
}

function crawlerTask() {
    return crawler.queue(arg.url)
}

function jsToJSON() {
    return src(`${files.toJsPath}/${arg.name}.js`)
        .pipe(toJSON({
            stringify: {
                space: '\t'
            }
        }))
        .pipe(dest(`${arg.name}`))
}

function runCrawler() {
    return writeJS().catch(error => console.error(error))
}


exports.runCrawler = runCrawler

Но то, что я получаю обратно в

созданный файл .js, является значением undefined.

Кто-нибудь может помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...