Node.js 如何将具有两个回调的函数调用转换为Promise
Promise: Promise用于处理结果,如果获得所需的输出,则执行 then 块的代码,如果出现错误,则执行 catch 块的代码。
Promise的样子大致如下:
function()
.then(data => {
// After promise is fulfilled
console.log(data);
})
.catch(err => {
// After promise is rejected
console.error(err);
});
回调函数: 回调函数是一个函数的最后一个参数。它将用于执行一些操作,使用从函数中获取的值。带有两个回调函数的函数调用如下所示
fs.readFile('./hello.txt', ,'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
这是File System(文件系统)模块的readFile(读文件)函数。它用于读取文件的数据。readFile函数接受两个参数:文件路径、文件编码和回调函数。文件路径是你的文件所在的路径,文件编码是文件的编码,默认是“utf8”。在回调函数中,检查错误,如果有错误则记录错误,如果没有错误则记录结果。
让我们先运行这个函数: 确保你已经创建了一个名为“hello.txt”的文件,并在文件中添加了一些内容,本例中是“Hello World”。
示例:
const fs = require('fs');
fs.readFile('./hello.txt', ,'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
输出:
让我们将此转换为一个 promise。
机制: 要将该 readFile 函数转换为 promise,我们需要创建一个新函数,我们称之为 readFilePromise ,它有两个参数 fileName 和 encoding 。在这个函数内部,我们返回一个新的 promise,并在这个 promise 中使用 readFile 函数。如果 readFile 函数返回所需的输出,则解析这个 promise,这意味着它以 promise 的形式返回数据,如果函数没有返回所需的输出,则拒绝这个 promise,这意味着它返回错误而不是数据。
const readFile = (fileName, encoding) => {
return new Promise((resolve, reject) => {
fs.readFile(fileName, encoding, (err, data) => {
if (err) {
return reject(err);
}
resolve(data);
});
});
}
完整代码:
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('./hello.txt', 'uft8')
.then(data => {
console.log(data);
})
.catch(err => {
console.log(err);
});
运行应用程序的步骤:
打开终端并键入以下命令。
node app.js
输出: