代码之家  ›  专栏  ›  技术社区  ›  Fede E.

具有嵌套函数的节点异步函数

  •  0
  • Fede E.  · 技术社区  · 7 年前

    processFile: async function(req, whatTo, callback){
    
        const lines = [];
    
        const lineReader = require('readline').createInterface({
            input: require('streamifier').createReadStream(req.file.buffer)
        });
    
        let errorPresent = false;
    
        lineReader.on('line', line => {
            lines.push(line.replace(/ /g,''));
        });
    
        lineReader.on('close', async () => {
    
            try {
    
                const results = await Promise.map(lines, async(line) => {
    
                    return await Transform(line);
    
                }, { concurrency: 80 });
    
                return results.join("\r\n");
    
            }catch(err){
                throw err;
            }
    
        });
    
    }
    

    然后我有一个路由,它调用这个函数,如下所示:

    const data = await tokenizer.processFile(req, 'tokenize');
    
    res.setHeader('Content-Type', 'text/plain'); 
    res.setHeader('Content-Disposition', 'attachment; filename=tokenized.txt');
    res.write(data, 'binary');
    res.end();
    

    return results.join("\r\n");

    我怎样才能做到这一点?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Cody Geisler    7 年前

    processFile: (req, whatTo) => new Promise((res,rej)=>{
    
        const lines = [];
    
        const lineReader = require('readline').createInterface({
            input: require('streamifier').createReadStream(req.file.buffer)
        });
    
        let errorPresent = false;
    
        lineReader.on('line', line => {
            lines.push(line.replace(/ /g,''));
        });
    
        lineReader.on('close', function(){
          res(lines);
        });
        // UNCAUGHT ERRORS, USE rej() for others
    });
    

    然后在异步/等待世界中处理您的转换,如下所示:

    let data;
    let lines = await tokenizer.processFile(req, 'tokenize');
    let results = await Promise.map(lines, async (line) => {
      return await Transform(line);
    }, { concurrency: 80 });