我正在按照以下步骤进行一组异步操作
我已经使用promise编写了我的代码,如下所示。
const readMzFile = (fileName, type) =>
new Promise((resolve, reject) =>
fs.readFile(fileName, type, (err, data) => {
return err ? reject(err) : resolve(data);
})
);
const createFolder = folderName =>
new Promise((resolve, reject) =>
fs.mkdir(folderName, function(err) {
return err ? reject(err) : resolve();
})
);
const writeMyFile = (filename, type) =>
new Promise((resolve, reject) =>
fs.writeFile(filename, type, function(err) {
return err ? reject(err) : resolve();
})
);
我正在按如下方式使用这些Promise函数
readMyFile("xxx", "utf8")
.then(function(data) {
var generated = anotherFunc(package_data, data);
var dir = "/home/malintha/test";
createFolder(dir).then(function() {
writeMyFile("xxx", generated_source).then(function() {
console.log("File saved !!");
res.end();
});
});
})
.catch(error => console.log("Error: ", error));
读取文件并创建文件夹时发生,但最后一步-文件写入未完成,并且在创建文件夹后似乎卡住了。
此代码有什么问题?
答案 0 :(得分:1)
乍看之下,约定的功能看起来并不糟糕(尽管可以研究util.promisify()
,所以您无需手动进行操作)。
至少,您没有正确返回承诺,因此可能会隐藏异常。
这样的事情怎么样?
readMyFile("xxx", "utf8")
.then(function(data) {
var generated = anotherFunc(package_data, data);
var dir = "/home/malintha/test";
return createFolder(dir)
.then(() => writeMyFile("xxx", generated))
.then(() => {
console.log("File saved !!");
res.end();
});
})
.catch(error => console.log("Error: ", error));