【发布时间】:2016-07-27 15:26:14
【问题描述】:
我在使用 fs.readfile 进行同步时遇到问题,它们第一次没有初始化,如果我再次尝试请求,那么我有结果。我知道我可以使用 Promise,并且我发现 Q from Kriskowal 有一些有用的东西。 我试过但没有成功。我不太了解如何实现它。如果有人可以帮助解决这个问题,我将永远感激不尽。
代码:
"use strict"
var Q = require('q');
var fs = require('fs');
var arrayZipBand = [];
var jsonZipCode = [];
var arrayParsedZipcodeBr = [];
exports.parse = function(opts) {
if (opts.zipBand.constructor != Array) {
opts.zipBand = [opts.zipBand];
}
if (opts.location.constructor != Array) {
opts.location = [opts.location];
}
if (opts.config === 0) {
opts.zipBand.forEach(function(file) {
fs.readFile(file, 'utf8', function(err, logData) {
if (err) throw err;
let text = logData.toString();
decodeURIComponent(text);
let lines = text.split('\n');
lines.forEach(function(line) {
let parts = line.split('@');
if (parts[1] != undefined) {
let obJson = {
LOC_NU: parts[0],
LOC_CEP_INI: parts[1],
LOC_CEP_FIM: parts[2]
}
arrayZipBand.push(obJson);
}
});
});
});
opts.location.forEach(function(file) {
fs.readFile(file, 'utf8', function(err, logData) {
if (err) throw err;
let text = logData.toString();
decodeURIComponent(text);
let lines = text.split('\n');
lines.forEach(function(line) {
let parts = line.split('@');
if (parts[1] != undefined) {
for (let i = 0; i < arrayZipBand.length; i++) {
if (parts[0] == arrayZipBand[i].LOC_NU) {
jsonZipCode.push(arrayZipBand[i]);
}
}
if (jsonZipCode === undefined) {
throw "Was not possible to find Zipcode for the id " + parts[0];
}
for (let i = 0; i < jsonZipCode.length; i++) {
let obJson = {
LOC_NU: parts[0],
UFE_SG: parts[1],
LOC_NO: parts[2],
MUN_NU: parts[8],
LOC_CEP_INI: jsonZipCode[i].LOC_CEP_INI,
LOC_CEP_FIM: jsonZipCode[i].LOC_CEP_FIM
}
arrayParsedZipcodeBr.push(obJson);
}
jsonZipCode = [];
}
});
});
});
};
return arrayParsedZipcodeBr;
}
【问题讨论】:
-
那么,您是如何尝试使用 Promise 的?请edit您的问题向我们展示您的尝试。你读过 Q 文档吗?您是否看到使用
Q辅助函数调用fs方法以便从它们那里获得承诺的示例?
标签: javascript node.js asynchronous promise q