返回来自 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)
};
我正在创建一个从节点中的 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)
};