async和await可以理解为generator的升级,因为generator需要一个runner库来运行它,这样一来就很麻烦,所有就有了async,其用法差不多。

await后面接异步操作或者同步操作,但是绝对不能为空,然后这个函数function开头接一个async

用法如下:

async function show() {
    let user = await $.ajax({
        url: "xxx/api",
        dataType: "json"
    });

    let items = null;
    if (user.login) {
        items = await $.ajax({
            url: "xxx/api",
            dataType: "json"
        });
    } else {
        if (user.vip) {
            items = await $.ajax({
                url: "xxx/api",
                dataType: "json"
            });
        } else {
            items = await $.ajax({
                url: "xxx/api",
                dataType: "json"
            });
        }
    }

    console.log(items);
};

show();

async的函数可以像普通函数那样调用,极大的方便了代码书写。

awite后面接什么

  1. promise对象
  2. 另一个async函数
  3. 普通函数
  4. 一个值

但是绝对不能为空。空的话就会报错。

错误处理

如果awite后面报错了,我们怎么处理。

使用了async后,函数变成了同步操作,他没有异步回调了,所以我们只能通过try catch 来进行捕获错误。

async function show() {
    try {
        let user = await $.ajax({
            url: "xxx/api",
            dataType: "json"
        });

        let items = null;
        if (user.login) {
            items = await $.ajax({
                url: "xxx/api",
                dataType: "json"
            });
        } else {
            if (user.vip) {
                items = await $.ajax({
                    url: "xxx/api",
                    dataType: "json"
                });
            } else {
                items = await $.ajax({
                    url: "xxx/api",
                    dataType: "json"
                });
            }
        }
    } catch (e) {
        console.log("出现错误", e);
    }


    console.log(items);
};

在async函数里面,将所有操作丢在try里面,如果某一处出现错误,catch便会捕获这个错误,从而达到错误提示的效果。

分类: Node 标签: asyncawaittrycatch

评论

全部评论 1

  1. 都覆盖
    都覆盖
    QQ Browser Windows 10
    都覆盖

目录