异步操作和async函数

来源:互联网 发布:国产电视机 知乎 编辑:程序博客网 时间:2024/05/28 14:57

基本概念:

异步操作的方式:

1)callback:符合一定条件时,可以执行该段程序,是横向发展,所以可能造成callback hell(回调地狱);

2)Promise:根据Promise实例状态,从而决定下一步的操作, 是纵向发展的,但会出现代码冗余,语义不清晰;

3)generator:利用同步化语句处理异步操作,特点:

                                                                          a)利用next方法分阶段执行generator函数内部的代码;

                                                                          b)generator函数可以内外互相交换数据,yeild输出, next中的参数输入;

                                                                          c)generator函数内部采用了try-catch方式,则外部调用throw方式抛出异常,内部可以捕捉异常进行处理;(外部抛出,内部扑捉)

async函数:异步操作的函数, 是generator的提高版;

async语法特点:async+await组合;             generator:*+yield组合;

eg:

async function A(){

                             let a1=await B();

                             let a2=await C();

                             }

generator函数与async函数的区别

1)generator要么手动执行(ne由于xt),要么自动执行(外加co模块)才能运行;

      async函数由于内置执行器,所 以可以一旦调用就自动执行代码,运行并输出最后的结果;

2)generator函数返回的是iterator对象;

      async返回的是promise对象;

3)generator函数语义化不明显;

      async函数语义化更为明显,它定义的函数为异步函数,await表示等待其后表达式的执行完成;


async函数运行规则:

1)async函数声明该函数为异步函数,await只存在与async函数中;

2)await+非promise对象:立即执行,不用等待;

      await+promise对象:等待Promise对象完成,只有完成了才能继续向下执行;

3)await可以获取promise对象的返回值状态

4)可以在async函数中采用try-catch模式捕捉异常;

5)async函数返回一个Promise对象,该对象为:若async中所有Promise都为resolved,则为resolved;若某一个promise对象为rejected,则终止执行async函数,并返回rejected的promise对象;

原创粉丝点击