Javascript 在承诺中写入文件
这里的函数创建一组文件,但不写入它们。然而,如果我最终删除了Javascript 在承诺中写入文件,javascript,node.js,es6-promise,fs,Javascript,Node.js,Es6 Promise,Fs,这里的函数创建一组文件,但不写入它们。然而,如果我最终删除了Promise.all,并且根本不解析函数,它会将数据写入文件。我试着写什么并不重要,我可以注释掉所有的东西,只写“hello world”,但它仍然不会写任何东西。问题很简单,为什么 const writeSmilFiles = (smilInfo) => { return new Promise ((resolve, reject) => { const p1 = smilPartOne(); con
Promise.all
,并且根本不解析函数,它会将数据写入文件。我试着写什么并不重要,我可以注释掉所有的东西,只写“hello world”,但它仍然不会写任何东西。问题很简单,为什么
const writeSmilFiles = (smilInfo) => {
return new Promise ((resolve, reject) => {
const p1 = smilPartOne();
const p2 = smilPartTwo();
let promises = dataTypes.new.camera_set.map(instance => {
return new Promise((resolve, reject) => {
const smilEntries = smilInfo.filter(smil => smil.BroadcastAndKlippTupleId == instance.BroadcastAndKlippTupleId && smil.CameraId == instance.CameraId);
try {
const fileName = `${__dirname}/newSmilFiles/${smilEntries[0].Smil}`;
const file = fs.createWriteStream(fileName);
file.write(p1);
smilEntries.forEach(entry => {
const smilEntry = smilSwitch(entry.Filename, entry.Bitrate, entry.Width, entry.Height);
file.write(smilEntry);
console.log(smilEntry);
file.write('\n');
});
file.write(p2);
file.end();
resolve(`Smil written.`);
} catch (ex) {
reject(ex);
}
});
});
Promise.all(promises).then(msg => {
resolve(msg);
});
});
};
解析流实际完成的时间:
file.on("finish", () => resolve(`Smil written.`));
解析流实际完成的时间:
file.on("finish", () => resolve(`Smil written.`));
请在您的问题中也提供简化版的“hello world”好吗?调试该简化版本可能更容易。这不是问题的原因,但您应该使用
返回承诺。所有(…)
,不要将其包装在您自己创建的额外承诺中。您所做的是一种承诺反模式,如果您的任何承诺被拒绝,您会发现编程错误。@jfriend00非常感谢,非常好的提示。我一直在想这个事实——现在有道理了!:)请在您的问题中也提供简化版的“hello world”好吗?调试该简化版本可能更容易。这不是问题的原因,但您应该使用返回承诺。所有(…)
,不要将其包装在您自己创建的额外承诺中。您所做的是一种承诺反模式,如果您的任何承诺被拒绝,您会发现编程错误。@jfriend00非常感谢,非常好的提示。我一直在想这个事实——现在有道理了!:)我想还是要在fs库中学习函数。非常感谢:)我想还是要在fs库中学习函数。非常感谢:)