我有大约三个文件,我将它们保存为三个变量中的字符串。我想连接这些字符串并将它们保存到文件中。问题是计算机在执行写入功能之前不等待读取这些文件,到那时为时已晚。我尝试使用回调和计数文件。我是以正确的方式做到这一点还是有更好的方式更简单?
var
start = Date.now();
header = "",
content = "",
footer = "",
html = "",
filesLoaded = 0,
fileTotal = 3,
fs = require('fs'),
getFileContent = function(filePath) {
fs.readFile(filePath, 'utf8', function(err, data) {
if(err) {
console.log(err);
} else {
filesLoaded++;
if(filesLoaded >= fileTotal)
console.log(Date.now() - start);
return data;
}
});
},
writeIndex = function() {
var interval = setInterval(function() {
if(filesLoaded >= fileTotal) {
html = header + content + footer;
console.log(html);
fs.writeFile('index.html', html, function(err) {
console.log("file not written:e" + err);
});
clearInterval(interval);
}
}, 10);
}
header = getFileContent('header.html');
content = getFileContent('content.html');
footer = getFileContent('footer.html');
writeIndex();
答案 0 :(得分:0)
JS中的连接很简单:
var combinedString = string1 + string2 + string3
将字符串写入文件也很容易
fs.writeFile('message.txt', 'Hello Node', function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
现在用combinedString
取代 hello world ,你就拥有它了
答案 1 :(得分:0)
不确定这是否是最佳解决方案但是有效。问题是当我在回调中返回数据时它不会更新我的变量。所以我按照我希望它们读取的顺序将文件名放在一个数组中。首先是header.html,然后是content.html和footer.html。所以我想我所做的就是回调链接。回调函数将调用递归函数并读取下一个文件。当它达到总数时,它将写入文件并返回杀死递归函数的函数。但我想让代码更容易理解。这对我来说似乎有些混乱。
$query = "SELECT DISTINCT `EmailAddress` FROM `Emails` WHERE `JobID` = 1";
$result = $conn->query($query);
if (!$result) {
printf("Query failed: %s\n", $mysqli->error);
exit;
}
while($row = $result->fetch_row()) {
$rows[]=$row;
}
$result->close();
$conn->close();
var_dump($rows); // This will return array(2) { [0]=> array(1) { [0]=> string(24) "abc@abc.com" } [1]=> array(1) { [0]=> string(17) "hello@gmail.com" } }
//This is how array should be
$MyV = array("abc@abc.com","hello@gmail.com");
var_dump($MyV); //this is an array I need to have: array(2) { [0]=> string(11) "Abc@abc.com" [1]=> string(11) "hello@g.com" }
答案 2 :(得分:0)
var files = ['a.txt','b.txt','c.txt'];
var outStream = fs.createWriteStream('outfile.txt');
for (file in files)
fs.createReadStream(file).pipe(outStream);