javascript的await

时启发 2024-06-21 22:16:54

计算机编程中,经常会遇到同步和异步操作的问题。同步,通常是为了在访问关键数据的某个操作完成前,一直等待其完成,然后再做其他操作;而异步,通常是在访问不相关数据时,为了提高操作效率,而通过不同进程或线程异步进行的相关操作。这是一点体会,非常的不严谨。

同步操作中,存在着异步操作的需要;异步操作进行完成之后,也可以通知后续的同步操作进行处理。比如,在网页的前端处理中,经常会遇到将用户输入数据提交到服务器保存的例子;而后台更新完成后,将远程返回数据交由回调函数进行后续处理。这在ES6之前,是很普遍的例子。例如,利用XmlHttpRequest以ajax(Asynchronous Javascript And XML)的方式,提交数据到服务器,并处理后台返回数据的情况。

图1 ajax post的简单代码

有意思的是,await是为解决异步操作的同步问题而生的:D。给我们的直观印象是在同步执行中,await一个异步函数,就像把异步函数当成了同步函数的一部分操作一样。被await的表达式,可以有三种形式:

1、正常的普通函数调用或表达式。所谓正常,指的是这个函数里不存在异步操作。这时,直接返回表达式或函数执行的结果。

2、返回Promise对象的表达式。即返回值为Promise对象。传递给Promise对象构造函数的参数可以理解为一个函数或lambda匿名函数;此参数函数的两个参数分别为返回具体结果的resolve函数和返回具体错误信息的reject函数。形式如:

图2 官方范例中的Promise对象

3、一个Thenable对象,一个包含了.then(resolve,reject)定义的对象。其实可以理解为Promise的早期实现。

官方的一个范例,可以帮助理解await的调用。注意调用函数的定义前加了async。

图3 await调用

0 阅读:16

时启发

简介:读书笔记,编程经验,旅途见闻,人生感悟