美文网首页
JS中神奇的异步:Async/Await

JS中神奇的异步:Async/Await

作者: 都江堰古巨基 | 来源:发表于2018-10-12 16:35 被阅读0次

异步JS的终极解决方案之:Async/Await
async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。 当函数执行的时候,注意:一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。

# 代码如下:
var sleep = function (time) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve();
        }, time);
    })
};

var start = async function () {
    // 在这里使用起来就像同步代码那样直观
    console.log('start');
    await sleep(3000);
    console.log('end');
};

start();
输出结果:
start
# 等待3秒后
end

注意的几点:

1、await 命令只能用在 async 函数之中,如果用在普通函数,就会报错。
2、await 只能使用在原生语法中,比如在 forEeach 结构中使用 await 是无法正常工作的,必须使用 for 循环的原生语法。

如果确实希望多个请求并发执行,可以使用 Promise.all 方法。

async function dbFuc(db) {
  let docs = [{}, {}, {}];
  let promises = docs.map((doc) => db.post(doc));

  let results = await Promise.all(promises);
  console.log(results);
}

关于错误捕获:

既然.then(..)不用写了,那么.catch(..)也不用写,可以直接用标准的try catch语法捕捉错误。

var sleep = function (time) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            // 模拟出错了,返回 ‘error’
            reject('error');
        }, time);
    })
};

var start = async function () {
    try {
        console.log('start');
        await sleep(3000); // 这里得到了一个返回错误
        
        // 所以以下代码不会被执行了
        console.log('end');
    } catch (err) {
        console.log(err); // 这里捕捉到错误 `error`
    }
};

相关文章

  • es6--async和await

    async 和 await被称为js异步的最终解决方案,那么我们来了解下:async:异步方法, await:等待...

  • JS中神奇的异步:Async/Await

    异步JS的终极解决方案之:Async/Awaitasync 函数返回一个 Promise 对象,可以使用 then...

  • async和await

    浅谈Async/Await用 async/await 来处理异步 async和await async:声明一个异步...

  • js异步编程(updating)

    js 异步编程方式: Promise,generator/yield,async/await 回掉函数 js事件监...

  • 2019-03-06

    1.行文思路 JS中处理异步 由callback->promise->generater->async/await...

  • async

    async/await特点 async/await更加语义化,async是“异步”的简写,async functi...

  • JS异步编程,你不得不知道的Generator的用法

    前面的文章中为大家讲解了Promise、async/await、Event Loop 等关于JS异步的文章,其中,...

  • ES8(一) —— async&await

    目录 async和普通函数的区别 await async/await处理多回调异步 async和await必须配合...

  • Async与aiohttp介绍

    【async/await】 asyncio--异步IO async--异步将异步从yieled写法中解放出来....

  • asp.net core 中async/await 使用

    asp.net core 中async/await 使用 async/await是用来进行异步调用的形式,内部其实...

网友评论

      本文标题:JS中神奇的异步:Async/Await

      本文链接:https://www.haomeiwen.com/subject/sqomsftx.html