如何在JS中等待回调中的其他结果

时间:2015-08-26 16:15:11

标签: javascript arrays node.js

我正在创建一个读取PDF文件并将其转换为CSV的代码。代码一次正在读取文件。现在我试图一次读取多个文件,解释代码:

我有我的bin / www,它将通过命令行初始化代码:

Command: node bin/www oneArchive.pdf twoArchive.pdf

'use strict';
var Break = require('../core');

var node    = process.argv[0];
var script  = process.argv[1];
var length  = process.argv.length;
var files   = [];

if (length > 2) {
    for (var i = 2; i < length; i++) {
        files.push(process.argv[i]);
    }

    Break.extract(files);
}

我将传递一个数组,无论是一个存档,两个还是三个。所以,我创建了将文件名放在files数组中的逻辑,然后发送到Break.extract:

var Break = {

    /**
     * Responsible for extract the text from PDF, DOC or TXT files.
     *
     */
    extract: function(files) {
        Extract.init(files);
    },
};

我还有其他阶段,但我现在需要工作的是提取阶段,我发送一个带有文件名的数组,这个阶段只会读取文件中的文本。

我在这个阶段的需求是获取我在数组中发送的文件,成为另一个数组中的相同文本文件,然后发送到下一个阶段,这与现在不相关。

继续..

因此,发送到提取阶段:

var Extract = {
    init: function(files, callback) {
        this.files      = files;
        this.callback   = callback;

        SeparateFiles.init(files, Extract.result);
    },

    result: function(files) {        
        console.log(files);
    }
};

这是我认为最重要的部分,我想分离文件并在结果方法中返回一个带有文本的数组。

所以:

SeparateFiles -> [File1.pdf, File2.pdf] -> LOGIC -> result method [Text1.pdf, Text2.pdf]

SeparateFiles:

var SeparateFiles = {
    init: function(files, callback) {
        for (var i = 0; i < files.length; i++) {
            Types.read(files[i], 'pdf', callback);
        }
    }
};

我正在这里做一个循环,它将逐个读取,在我有的Types对象的read方法中:

/// ALL THE LOGIC TO BREAK THE FILE

When you finish, send to callback function, which is the result method.

这里的问题是我收到一个文本,另一个是文本,我希望在一个数组中同时收到它们。

这里的问题是循环我认为,我知道如何在两个文件中应用逻辑并在发送到结果方法之后,但我想应用逻辑,等待完成和发送到结果。

读取逻辑非常大,我不能粘贴在这里,但我有几种方法,在最后我只是将文本发送到结果方法。

1 个答案:

答案 0 :(得分:0)

Javascript承诺?

如果您要进行复杂的异步操作,可能需要考虑使用Promises。虽然传统浏览器并没有广泛支持它们,但是有很多填充物可以填补这些空白。

使用promises,如果你想在继续之前等待两个单独的异步操作完成,你可以执行以下操作:

Promise.all([async1, async2])
       .then(function() {
            //Only when both async1 and async2 have been resolved
            //(completed without failure) does this code execute
        });

这是关于JS Promises的a great article

这是承诺的a polyfill(实际上在上面的文章中已经链接过了。)

希望这有帮助!