📅  最后修改于: 2023-12-03 15:03:11.985000             🧑  作者: Mango
在 Node 中,很多操作都需要按照一定的顺序执行,例如读取文件、发送 HTTP 请求等等。为了方便开发者控制执行顺序,Node 提供了多种方法和模块。
最基本的控制流程方法是回调函数。Node 中绝大部分的异步函数都采用回调函数来通知操作完成或出错。
例如,读取文件的方法 fs.readFile()
就采用了回调函数:
const fs = require('fs');
fs.readFile('file.txt', (err, data) => {
if (err) throw err;
console.log(data);
});
在上面的代码中,第二个参数是回调函数。当文件读取完成后,Node 会自动调用这个回调函数,并将读取到的数据传入其中。
Promise 是一种更高级的控制流程方法。它可以让异步函数返回一个 Promise 对象,从而使得多个异步操作可以串行执行,也可以并行执行。
在 Node 中,可以使用内置的 util.promisify()
方法将回调函数转换成 Promise 对象。例如,下面的代码演示了如何使用 Promise 来读取文件:
const util = require('util');
const fs = require('fs');
const readFile = util.promisify(fs.readFile);
readFile('file.txt')
.then(data => {
console.log(data);
})
.catch(err => {
console.error(err);
});
在上面的代码中,我们使用了 util.promisify()
方法将 fs.readFile()
方法转换成了一个返回 Promise 对象的函数 readFile()
,然后就可以直接使用 then()
和 catch()
方法来控制执行流程了。
async/await 是 ES2017 中引入的一种更加方便的异步编程方法。它可以让异步函数的代码看起来更加像同步代码,从而更加易于理解和维护。
在 Node 中,可以直接使用 async/await 方法来控制执行流程。例如,下面的代码演示了如何使用 async/await 来读取文件:
const util = require('util');
const fs = require('fs');
const readFile = util.promisify(fs.readFile);
async function main() {
try {
const data = await readFile('file.txt');
console.log(data);
} catch (err) {
console.error(err);
}
}
main();
在上面的代码中,我们定义了一个 main()
函数,并使用 async
关键字来表示这是一个异步函数。然后,在 main()
函数中,我们可以直接使用 await
关键字来等待 readFile()
函数的返回结果,从而控制执行顺序。