我應該每次都這樣做,傳遞一個空函數作爲回調以避免錯誤?
號
什麼是我們的最佳做法?
傳遞函數並處理它報告的任何錯誤。您還需要處理來自mkdir
和readFile
的錯誤,該錯誤當前您將忽略。
例如爲:
fs.mkdir('stuff', function(err) {
if (err) {
// Do something with the fact mkdir failed
} else {
fs.readFile('readMe.txt', 'utf8', function(err, data) {
if (err) {
// Do something with the fact readFile failed
} else {
fs.writeFile('./stuff/writeMe.txt', data, function(err) {
if (err) {
// Do something with the fact writeFile failed
}
});
}
});
}
});
...這是回調地獄,這是使用的承諾,而不是動機的一部分的公平例子。你可以promisify FS的API(使用任何一些庫,如promisify
),並像這樣做:
fsp.mkdir('stuff')
.then(() => fsp.readFile('readMe.txt', 'utf8'))
.then(data => fsp.writeFile('./stuff/writeMe.txt', data))
.catch(err => {
// Do something with the fact something failed
});
...其中fsp
對於promisified FS API一個plaeholder。
在節點8.x中+,你可以使用async
/await
寫同步看代碼與promisified的API:
// This must be inside an `async` function
try {
fsp.mkdir('stuff');
const data = await fsp.readFile('readMe.txt', 'utf8');
await fsp.writeFile('./stuff/writeMe.txt', data);
} catch (err) {
// Do something with the fact something failed
}
你的回調不處理任何錯誤條件.... –