返回来自Promise的数据

时间:2015-08-24 15:22:18

标签: javascript node.js pdf promise bluebird

我正在创建一个脚本,该脚本从节点中的pdf读取数据,我使用pdf_text_extract,并尝试使用Bluebird返回数据。

Types.js:

var pdf = require('pdf');

var Types = {
    read: function(file, extension) {
        pdf.extract(file, function(error, data) {
            console.log(data);
        });
    }
};

module.exports = Types;

数据是[功能],这显然是错误的。

Pdf.js:

var Promise             = require('bluebird');
var pdf_text_extract    = require('pdf-text-extract');

var Pdf = {
    extract: function(file, cb) {
        return new Promise(function(resolve, reject) {
            if (reject) {
                console.log(reject);
            }

            pdf_text_extract(file, function(error, data) {
                if (error) {
                    console.log(error);
                }

                resolve(data);
            });
        });
    }
};

module.exports = Pdf;

我试图访问正在调用Types.js的其他存档中的数据。

1 个答案:

答案 0 :(得分:2)

不,data不是函数。您传递的cb函数完全忽略并且从未执行过,您看到的日志来自console.log(reject);(因为reject始终是真的)。​​< / p>

正确

var pdf = {
    extract: function(file) {
        return new Promise(function(resolve, reject) {
            pdf_text_extract(file, function(error, data) {
                if (error) 
                    reject(error);
                else
                    resolve(data);
            });
        });
    }
};
var types = {
    read: function(file, extension) {
        return pdf.extract(file).then(function(data) {
            console.log(data);
        }, function(error) {
            console.log(error);
        });
        // returns a promise that fulfills with undefined once data or error are received
    }
};

或者更简单

var pdf = {
    extract: Promise.promisify(pdf_text_extract)
};