返回来自 Promise 的数据

Returning data that came from Promise

我正在创建一个从节点中的 pdf 读取数据的脚本,我正在使用 pdf_text_extract,并且正在尝试 return 使用 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;

数据是一个[Function],这显然是错误的。

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。

不,data 不是函数。您传递的 cb 函数完全 被忽略 并且从未执行过,您看到的日志来自 console.log(reject); (因为 reject 总是真实的).

正确的是

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)
};