欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

http://es6.ruanyifeng.com/#docs/generator

http://es6.ruanyifeng.com/#docs/async

相关标签: 异步