资讯专栏INFORMATION COLUMN

promise async await 理解笔记

NoraXie / 2913人阅读

摘要:在异步编程中,提供了对象的方式。例如等同于所以可以理解为生成一个实例。那么自然也可以去调用则是配合使用的。等于是等待一个返回值,等待的执行结果。但是函数不会造成阻塞,所以配合使用,则没有影响到外部。

在异步编程中,es6提供了promise对象的方式。
简单的用法

var promise = new Promise((resolve,reject)=>{
    if(){
        resolve(res)
    }else{
        reject(res)
    }
})
promise.the((res)=>{}).catch((res)=>{})

而async 实则是返回了一个promise对象

async function test(){
    console.log("123");
}
var restult = test();
console.log(result);//=>>Promise{"123"};
//如果函数return 一个直接量,那么就等于直接去调用Promise.resolve()方法
//Promise.resolve方法也就是生成一个Promise实例,并且其直接调用resolve。
//例如
Promise.resolve("test");
//等同于
new Promise((resolve,reject)=>resolve("test"));
//所以async可以理解为生成一个promise实例。
//那么自然也可以去调用.then()
test.then((res)=>{})

await则是配合async使用的。await等于是等待一个返回值,等待async的执行结果。

async function testAsync() {
    return Promise.resolve("hello async");
}

async function test() {
    const res = await testAsync();
    console.log(res);
}

test();

输出结果就是"hello async".
await必须配合async使用,但是await的对象可以不是Promise对象,一个普通的函数也可以使用。
如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。但是async函数不会造成阻塞,所以await配合async使用,则没有影响到外部。

async和await的作用
可以把promise 的then写得简洁,便于理解
流程就是生成一个async函数,然后函数内部去await一个promise对象得运行结果,再用这个结果去调用其它得Promise对象,如此得话then((res)=>{}).then((ress)=>{})。就可以写成

var res = await foo(); 
var ress = await fob(res);
var resss = await foc(ress)

在then链复杂得情况下,promise得参数传递非常复杂,但使用async+await得方式,就如同同步编程一般,非常清晰和流畅。

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

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

相关文章

  • JavaScript闯关笔记

    摘要:对空数组是不会执行回调函数的。就算改变已经发生了,你再对对象添加回调函数,也会立即得到这个结果。用来表示函数是异步的,定义的函数会返回一个对象,可以使用方法添加回调函数。 介绍 通过Array/Object/Function基础类型编写。 看到自己不了解的或者比较新颖的用法便会写上。 不定时更新内容。 本文首发于我的个人网站: Timbok.top 目录 Array 迭代方法 ...

    Jokcy 评论0 收藏0
  • 重学前端学习笔记(十七)--Promise里的代码为什么比setTimeout先执行?

    摘要:版本以及之前,本身还没有异步执行代码的能力,宿主环境传递给引擎,然后按顺序执行,由宿主发起任务。采纳引擎术语,把宿主发起的任务称为宏观任务,把引擎发起的任务称为微观任务。基本用法示例的回调是一个异步的执行过程。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的...

    pinecone 评论0 收藏0
  • 重学前端学习笔记(十七)--Promise里的代码为什么比setTimeout先执行?

    摘要:版本以及之前,本身还没有异步执行代码的能力,宿主环境传递给引擎,然后按顺序执行,由宿主发起任务。采纳引擎术语,把宿主发起的任务称为宏观任务,把引擎发起的任务称为微观任务。基本用法示例的回调是一个异步的执行过程。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的...

    zorpan 评论0 收藏0
  • 重学前端学习笔记(十七)--Promise里的代码为什么比setTimeout先执行?

    摘要:版本以及之前,本身还没有异步执行代码的能力,宿主环境传递给引擎,然后按顺序执行,由宿主发起任务。采纳引擎术语,把宿主发起的任务称为宏观任务,把引擎发起的任务称为微观任务。基本用法示例的回调是一个异步的执行过程。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的...

    xiongzenghui 评论0 收藏0

发表评论

0条评论

NoraXie

|高级讲师

TA的文章

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