0
我想要獲取某個二進制文件的某些段,然後將它們重新組合爲精簡格式。但是,完成這項任務後,二進制數據將以半隨機順序進行加擾。實際上,第一個大約15k字節是正確的,然後在這之後不斷髮生衝突。出了什麼問題?我相信這些流是相互碰撞的(因爲沒有更好的隱喻),並且結果字節長度是正確的。這是爲什麼發生?我認爲我對於異步性採取了足夠的預防措施?無法正確解析和重組使用讀/寫流的二進制文件
var destinationPath = something.bin;
Promise.all(sources.map(function (source) {
return new Promise(function (resolve, reject) {
var output = fs.createWriteStream(destinationPath, {'flags': 'a', 'bufferSize': 64 * 4096});
var input = fs.createReadStream(source.filePath, {
start: source.parameters.start,
end: source.parameters.end + 3
});
input.on('end', function() {
output.on('finish', function() {
resolve();
});
});
input.pipe(output);
});
}));
我不明白你的代碼。這不會同時執行嗎?爲什麼Promise.resolve():在循環的外面和循環內的promise的重新分配?你在循環中返回一個承諾是什麼? – easymoden00b
'Promise.all([x1,x2,x3])'(您的代碼)是併發的,x1,x2和x3例程將同時運行。我的答案中的代碼最終做的是'Promise.resolve()。then(x1).then(x2).then(x3)'。 'Promise.resolve()'初始化de promise鏈,然後每個promise只在前一個promise完成時執行。 – Pandaiolo
好的,謝謝我明白,但不會同時使用sources.forEach(){}操作嗎? – easymoden00b