Đây là mã của tôi:Node.js tập tin ghi trong vòng lặp không ngẫu nhiên
function aCallbackInLoop(dataArray) {
dataArray.forEach(function (item, index) {
fs.appendFile(fileName, JSON.stringify(item) + "\r\n", function (err) {
if (err) {
console.log('Error writing data ' + err);
} else {
console.log('Data written');
}
});
});
}
tôi nhận được lỗi ngẫu nhiên:
Data written
Data written
.
.
Error writing data Error: UNKNOWN, open 'output/mydata.json'
Error writing data Error: UNKNOWN, open 'output/mydata.json'
.
.
Data written
Error writing data Error: UNKNOWN, open 'output/mydata.json'
Chức năng (aCallbackInLoop) là một callback cho một yêu cầu dịch vụ web , trả về các khối dữ liệu trong dataArray. Nhiều yêu cầu dịch vụ web đang được thực hiện trong một vòng lặp, do đó, cuộc gọi lại này có lẽ được gọi song song. Tôi nghi ngờ đó là một số vấn đề khóa tập tin, nhưng tôi không chắc chắn làm thế nào để giải quyết.
PS: Tôi đã thực hiện chắc chắn nó không phải là một vấn đề dữ liệu (Tôi đăng nhập tất cả các mục trong dataArray)
Chỉnh sửa: Mã sau khi cố gắng ghi dòng:
function writeDataToFile(fileName, data) {
try {
var wStream = fs.createWriteStream(fileName);
wStream.write(JSON.stringify(data) + "\r\n");
wStream.end();
} catch (err) {
console.log(err.message);
}
}
function aCallbackInLoop(dataArray){
dataArray.forEach(function(item, index){
writeDataToFile(filename, item); //filename is global var
});
}
Điều này giải quyết vấn đề này, nhưng tôi vẫn hy vọng để có được cách làm việc không đồng bộ. Nếu không, tôi sẽ đánh dấu câu trả lời này là giải pháp. – SlowAndSteady
Sử dụng một phiên bản đồng bộ hiếm khi đi đúng cách trong máy chủ node.js. – jfriend00
@ jfriend00 - Đúng, nhưng với bối cảnh đã viết cho cùng một tệp một lần nữa và một lần nữa, đồng bộ là cách tiếp cận tốt nhất. OP có thể phải thiết kế lại. – manojlds