如何使用参数从事件调用函数

时间:2016-11-13 11:42:36

标签: javascript node.js

我使用以下代码:

yauzl.open(filePath, function (err, zipFile) {
    zipFile.on('entry', (entry) =>{
        //console.log(entry.fileName);
        if (/\/$/.test(entry.fileName)) {
            return;
        }
        zipFile.openReadStream(entry, (err, readStream) => {
            if (err) {
                logger.info(err);
                reject(err);
            } else {
    ...

现在我想通过执行以下操作来更改代码以使其更具可读性:

yauzl.open(filePath, (err, zipFile) => {
    //zipFile = zipFile;
    if (err) {
        __rejectAndLog(err);
        return;
    }

    zipFile.on('entry', __processEntry(zipFile))
        .once('error', __rejectAndLog)
        .once('close', () => {
            console.log(`Unpacked ${numOfFiles} files`);
            resolve();
        });
    });

这是processEntry:

function __processEntry(zipFile) {

    zipFile.openReadStream(entry, (err, readStream) => {
        if (err) {
            __rejectAndLog(err);
            return;
        }

        if (/\/$/.test(entry.fileName)) {
            // directory file names end with '/'   
            return;
        }

我收到错误cannot use **openReadStream** of undefined。我怎么处理呢?

zipFile.openReadStream(entry, (err, readStream) => {

此外,我还需要传递条目value的任何想法吗?

1 个答案:

答案 0 :(得分:0)

使用bind zipFile.on('entry', __processEntry.bind(null, zipFile))并将__processEntry重新声明为function __processEntry(zipFile, entry)