Node.js 如何将基于Promise的应用程序重写为使用Async/Await
在本文中,我们将看到如何将基于Promise的Node.js应用程序重写为使用Async/Await。
假设我们需要读取文件’index.txt’的内容,并且我们有一个名为’readFilePromise’的函数,它使用fs模块的’readFile’方法来读取文件的数据。如果找到数据,则’readFilePromise’函数将解决Promise,否则将拒绝带有相应错误的Promise。
const fs = require('fs');
const readFilePromise = (fileName, encoding) => {
return new Promise((resolve, reject) => {
fs.readFile(fileName, encoding, (err, data) => {
if (err) {
return reject(err);
}
resolve(data);
});
});
}
然后,我们可以通过调用’readFilePromise’函数处理数据,该函数接受两个参数:文件路径和文件编码。如果获取到所需的输出,就执行then块中的代码;如果获取到错误,就执行catch块中的代码。
readFilePromise('./input.txt', 'utf8')
.then(data => {
console.log(data);
})
.catch(err => {
console.log(err);
});
示例:
const fs = require('fs');
const readFilePromise = (fileName, encoding) => {
return new Promise((resolve, reject) => {
fs.readFile(fileName, encoding, (err, data) => {
if (err) {
return reject(err);
}
resolve(data);
});
});
}
readFilePromise('./input.txt', 'utf8')
.then(data => {
console.log(data);
})
.catch(err => {
console.log(err);
});
输出:
现在让我们使用async/await来重写这个promise。为了使用’await’,我们必须使用’async’关键字,’await’用于暂停程序执行,直到fs模块的’readFile’方法返回结果。这个结果可能是一个错误或所需的数据。如果是错误,则需记录错误;如果不是,需记录所需数据。
const fs = require('fs');
const readFileAsyncAwait = async (filePath, encoding) => {
await fs.readFile(filePath, encoding, (err, data)=>{
if(err){
console.log(err);
}
console.log(data);
});
}
然后,我们可以使用两个参数调用‘readFilePromise’函数,即文件路径和文件编码。如果发生错误,它只会记录错误,否则记录所需的数据。
readFileAsyncAwait('input.txt', 'utf8');
示例:
const fs = require('fs');
const readFileAsyncAwait = async (filePath, encoding) => {
await fs.readFile(filePath, encoding, (err, data)=>{
if(err){
console.log(err);
}
console.log(data);
});
}
readFileAsyncAwait('input.txt', 'utf8');
输出: