javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JavaScript中async和await

JavaScript中async和await的使用及队列详情

作者:程序员布欧

这篇文章主要介绍了JavaScript中async和await的使用及队列详情,主要围绕js中async和await简单解析展开面试中可能会问到的关于队列的一些场景和知识点,需要的朋友可以参考一下

一、宏任务和微任务的队列入门知识,可以参考之前的文章:

[JavaScript的事件循环机制]

宏任务和微任务在前端面试中,被经常提及到,包括口头和笔试题

1.async && await概念

async:

await:

2.async && await基本使用

/**
 * async 函数是使用async关键字声明的函数。
 * async 函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。
 * async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。
 *
 * await  操作符用于等待一个Promise 对象。它只能在异步函数 async function 中使用。
 * await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理 (fulfilled),其回调的 resolve 函数参数作为 await 表达式的值,继续执行
 * async function。
 * 若 Promise 处理异常 (rejected),await 表达式会把 Promise 的异常原因抛出。
 * 另外,如果 await 操作符后的表达式的值不是一个 Promise,则返回该值本身。
 *
 *
 * */
// 模拟请求接口
function userInfo() {
	return new Promise((resolve) => {
		setTimeout(() => {
			resolve("zhangsan");
		}, 2000);
	});
}

// 接收请求的返回值
async function fetchUserInfo() {
	let res = await userInfo();
	console.log(res);
}
fetchUserInfo(); // zhangsan

// 不是异步promise
let testFn = function test(){}
async function notPromise() {
	var str = await testFn;
	console.log(str); // function test(){}
}
notPromise();

二、async&& await结合promise在面试时回遇到的队列问题

function userInfo() {
	return new Promise((resolve) => {
		setTimeout(() => {
			resolve(`接口返回值---------------1`);
		}, 2000);
	});
}

console.log("1");
let p1 = new Promise((resolve, reject) => {
	resolve("p1");
});
let p2 = new Promise((resolve, reject) => {
	resolve("p2");
});
async function getUserInfo() {
    console.log("2");
    
    p1.then((res) => {
    	console.log(res);
    });
    var awaitRes = await userInfo();
    console.log(awaitRes); // 接口返回值---------------1
    
    p2.then((res) => {
    	console.log(res);
    });
    
    console.log("3");
}
console.log("4");
getUserInfo(); // 异步方法,加入任务队列执行
console.log("5");

/**
 *
 * 执行顺序
 *
 * 1
 * 4
 * 2
 * 5
 * p1
 * 接口返回值---------------1
 * 3
 * p2
 *
 *
 * */

所以整个代码块执行的顺序是:

1,4,2,5,p1,接口返回值---------------1,3,p2

三、总结

async和await作为ecmascript的新特性,目前更多的场景使用在前端获取后端接口和进行一些异步操作等。

到此这篇关于JavaScript中async和await的使用及队列详情的文章就介绍到这了,更多相关JavaScript中async和await内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文