ES6异步

ES6异步

JavaScript Promise | 菜鸟教程 (runoob.com)

ES6异步有两种实现方式如下:

Promise 对象

  • 这是一个被实例化的时候就开一个线程来后台运行的对象
  • 构造函数接受一个函数,这个函数接受resolve,rejected​这两个函数类的参数,然后执行异步逻辑,当执行成功后,可以调用resolve(val)​告诉promise已经完成工作,并返回信息val;失败时调用reject(err)​,停止执行并返回信息err
  • 使用类方法then​来指定完成后的操作,其接受两个函数分别作为resolve​和reject​后的处理逻辑,这两个函数传入的参数即为val​或err​。如果这些函数有返回,then​会返回它们返回的值,否则将返回这个promise本身。

async 函数与 await

  • 这是ES7的内容,它提供了简化的异步,类似python了,但是无需我们手动去处理线程,事件循环等内部模型。
  • 它相当于一个promise,不同的是它调用时才开始被挂到事件循环上运行。
  • 它的return​相当于resolve(val)​,同时它的返回是一个promise代表它本身
  • await​只可以在async​函数内使用,等待一个promise对象(可以是创建的或者是异步函数返回的)完成并获取返回值,即val​或者err​,因此它可以组织异步函数的顺序。

实例代码

const print = (delay, info) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(info);
            resolve("res");
        }, delay * 1000);
    })
}
// 等价于以下代码,注意js没有sleep函数,也不允许主线程阻塞,下面的sleep函数也只能在异步函数中有用。	
// const sleep = (delay) => {
//     return new Promise((resolve, reject) => setTimeout(resolve, delay * 1000))
// }
// const print = async (delay, info) => {
//     await sleep(delay)
//     console.log(info);
//     return "res"
// }

const print = async  
const main = async () => {
    // 这三个是顺序执行的,先等一秒打印1,再等两秒打印2,在等3秒打印3
    // 这样和普通函数有什么区别呢? 普通函数就会阻塞,但是异步函数它可以让三条语句在后台执行,直接执行下面的“start”
    let res1 = await print(1, 1);
    await print(2, 2);
    let res3 = await print(3, 3);
    console.log(res3)
    return 1001
}
// const res = main()
// // 这里异步函数返回的res是一个promise,它的完成即为异步函数执行完毕,传给then的是return的值
// res.then((r) => console.log("end" + r));
// console.log("start")
const print = (delay, info) => { return new Promise((resolve, reject) => { setTimeout(() => { console.log(info); resolve("res"); }, delay * 1000); }) } // 等价于以下代码,注意js没有sleep函数,也不允许主线程阻塞,下面的sleep函数也只能在异步函数中有用。 // const sleep = (delay) => { // return new Promise((resolve, reject) => setTimeout(resolve, delay * 1000)) // } // const print = async (delay, info) => { // await sleep(delay) // console.log(info); // return "res" // } const print = async const main = async () => { // 这三个是顺序执行的,先等一秒打印1,再等两秒打印2,在等3秒打印3 // 这样和普通函数有什么区别呢? 普通函数就会阻塞,但是异步函数它可以让三条语句在后台执行,直接执行下面的“start” let res1 = await print(1, 1); await print(2, 2); let res3 = await print(3, 3); console.log(res3) return 1001 } // const res = main() // // 这里异步函数返回的res是一个promise,它的完成即为异步函数执行完毕,传给then的是return的值 // res.then((r) => console.log("end" + r)); // console.log("start")
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇