JavaScript学习:异步方法的几种写法
程序员文章站
2022-03-09 23:41:45
...
异步方法的写法包括,回调函数、async 函数、Promise、Generator 函数。
以读取文件为例,具体写法见下面的代码:
const fs = require("fs")
const data = fs.readFileSync("./test.txt");//阻塞代码
console.log("同步读取", data.toString());
fs.readFile("./test.txt", (error, data) => {
console.log("异步回调", data.toString());
})
console.log("其它代码");
// 异步代码同步化 三种方式
//1.promise
// const util = require('util');//导入工具包
// const readFile = util.promisify(fs.readFile);//使用工具包中的方法
const { promisify } = require("util");//直接解构出promisify
const readFile = promisify(fs.readFile);
readFile("./test.txt").then(data => {
console.log("promisify", data.toString())
}).catch(error => {
console.log(error);
})
// v10.0
// fs Promises API
const { promises } = require('fs');
promises.readFile('./test.txt').then(data => console.log("promises", data.toString()))
//2.generator
function* readFileConf(filePath) {
const data = yield readFile(filePath);
console.log("generator", data.toString());
}
const gen = readFileConf("./test.txt");
gen.next().value.then(data => gen.next(data));
//3.async await
/*
ES2017 标准引入了 async 函数,使得异步操作变得更加方便。
async 函数是什么?一句话,它就是 Generator 函数的语法糖。
async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。
*/
async function readFileAsync(filePath) {
const data = await readFile(filePath);
console.log("async await", data.toString());
}
readFileAsync("./test.txt");
详解异步阮一峰老师的文章
http://es6.ruanyifeng.com/#docs/promise
上一篇: 异步流程 工具
下一篇: centos7中如何安装python3