资讯专栏INFORMATION COLUMN

JavaScript async 函数

goji / 973人阅读

摘要:当函数执行时,遇到就会停止等待,直到异步操作完整之后,再继续往下执行。并且,函数内部语句返回的值,会成为方法回调函数的参数。抛出的错误对象会被方法回调函数接收到。命令后面的对象变为状态只要一个语句后面的变为,那么整个函数都会中断执行。

async 函数是什么?

async函数是什么?一句话,它就是 Generator 函数的语法糖。

当async函数执行时,遇到await就会停止等待,直到异步操作完整之后,再继续往下执行。

下面是一个例子,指定多少毫秒后函数返回一个值

async function asyncReturn(value, ms) {
    await new Promise(function(resolve, reject) {
        setTimeout(resolve, ms);
    });
    return value;
}

async函数返回一个 Promise 对象,可以使用then方法添加回调函数。并且,async函数内部return语句返回的值,会成为then方法回调函数的参数。

asyncReturn("Hello World", 3000).then(value => {
    console.log(value);
});

async 函数的错误处理机制

async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

async function fn1() {
    throw new Error("async 函数内部抛出错误了!");
}
fn1().catch(err => {
    console.log(err);
});

await命令后面的 Promise 对象如果变为reject状态,则reject的参数会被catch方法的回调函数接收到。

async function fn2() {
    await Promise.reject("await命令后面的 Promise 对象变为reject状态");
}
fn2().catch(err => {
    console.log(err);
});

只要一个await语句后面的 Promise 变为reject,那么整个async函数都会中断执行。

async function fn3() {
    await Promise.reject("出错了");
    await Promise.resolve("hello world"); // 不会执行
}
fn3().catch(err => {
    console.log(err);
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91968.html

相关文章

  • 而井教你判断当前Javascript运行环境是否支持async函数

    摘要:文章起因今天在学习一个的测试框架中,在阅读文档时看到用来判断是否支持函数的代码。 文章起因 今天在学习Jasmine(一个Javascript的测试框架)中,在阅读文档时看到用来判断是否支持async函数的代码。 // 获取async函数的原型的构造器 function getAsyncCtor() { try { eval(var func = async fun...

    hot_pot_Leo 评论0 收藏0
  • 如何正确合理使用 JavaScript async/await !

    摘要:想阅读更多优质文章请猛戳博客一年百来篇优质文章等着你引入的在的异步编程中是一个极好的改进。可能会产生误导一些文章将与进行了比较,并声称它是下一代异步编程风格,对此作者深表异议。结论引入的关键字无疑是对异步编程的改进。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想阅读更多优质文章请猛戳GitHub博客,一年百来篇...

    trigkit4 评论0 收藏0
  • 1 分钟读完《10 分钟学会 JavaScriptAsync/Await》

    摘要:分钟读完以前我们使用。把异步变成了同步。允许同时执行所有的异步函数函数总耗时为秒的耗时。的错误处理在语法中,我们可以使用进行错误处理。在中的分支会进入语句。阅读原文讨论地址分钟学会的如果你想参与讨论,请点击这里 1 分钟读完 JavaScript Async/Await Explained in 10 Minutes showImg(https://segmentfault.com/i...

    wapeyang 评论0 收藏0
  • 浅谈JavaScript中的事件循环机制

    摘要:事件循环背景是一门单线程非阻塞的脚本语言,单线程意味着,代码在执行的任何时候,都只有一个主线程来处理所有的任务。在意识到该问题之际,新特性中的可以让成为一门多线程语言,但实际开发中使用存在着诸多限制。这个地方被称为执行栈。 事件循环(Event Loop) 背景 JavaScript是一门单线程非阻塞的脚本语言,单线程意味着,JavaScript代码在执行的任何时候,都只有一个主线程来...

    Pluser 评论0 收藏0
  • 理解 JavaScriptasync/await

    摘要:因为函数返回一个对象,所以可以用于等待一个函数的返回值这也可以说是在等函数,但要清楚,它等的实际是一个返回值。帮我们干了啥作个简单的比较上面已经说明了会将其后的函数函数表达式或的返回值封装成一个对象,而会等待这个完成,并将其的结果返回出来。 随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await。我第一次看到这组关键字并不是在 JavaSc...

    tracymac7 评论0 收藏0
  • 现代JS中的流程控制:详解Callbacks 、Promises 、Async/Await

    摘要:控制台将显示回调地狱通常,回调只能由一个异步函数调用。更多资源使更友好规范使用异步函数简化异步编码旅程异步编程是一项在中无法避免的挑战。 JavaScript经常声称是_异步_。那是什么意思?它如何影响发展?近年来这种方法有何变化? 请思考以下代码: result1 = doSomething1(); result2 = doSomething2(result1); 大多数语言都处理每...

    shadowbook 评论0 收藏0

发表评论

0条评论

goji

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<