JS中神奇的异步:Async/Await

异步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`
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 12,046评论 5 22
  • async 函数 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 async 函数是...
    huilegezai阅读 5,013评论 0 6
  • 原文连接:https://blog.csdn.net/sinat_17775997/article/details...
    小豆soybean阅读 9,716评论 0 7
  • 荡先秦:佚名荡荡上帝,下民之辟。疾威上帝,其命多辟。天生烝民,其命匪谌。靡不有初,鲜克有终。文王曰咨,咨汝殷商。曾...
    To者也阅读 2,607评论 0 0
  • 其实怎么说呢,首先当然要感谢小白训练营的班班和学姐们,很负责很有耐心。 我当初只是意外的看到有这训...
    石声藤阅读 1,675评论 1 0

友情链接更多精彩内容