ES6中的常用异步对象和函数

本文深入探讨Promise对象、Generator函数及Async函数的使用技巧,通过具体实例展示Promise链式调用、交替亮灯效果的实现,以及Generator函数的进程与协程特性,最后解析Async函数的执行流程与错误处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.promise对象

// promise对象
const promise=new Promise((resolve,reject)=>{
    console.log(1);
    resolve();
    console.log(2);
})
promise.then(()=>{
    console.log(3);
})
console.log(4);//打印的结果:1,2,4,3

const promise=Promise.resolve(1).then(2).then(Promise.resolve(3)).then(console.log);
// 链式调用,then的参数是非函数,跳过。所以最终返回1。
// promise的应用
// 3秒之后亮一次红灯,再过两秒亮一次绿灯,再过1秒亮一次黄灯,用promise实现多次交替亮灯的效果
// 拆解:(1)多少秒后亮某个颜色的灯,(2)顺序亮一批灯,循环顺序亮一批灯
function light(color, second) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            console.log(color);
            resolve();
        }, second * 1000);
    })
}
function orderLights(list) {
    let promise = Promise.resolve();
    list.forEach(item => {
        promise = promise.then(function () {
            return light(item.color, item.second);
        })
    });

    promise.then(function () {
        return orderLights(list);
    })
}
orderLights([{
    color: 'red',
    second: 3,
}, {
    color: 'green',
    second: 2,
}, {
    color: 'yellow',
    second: 1,
}]);

2.generator函数

// generator函数 一个进程多个协程;
function* createIterator() {
    let first = yield 1;
    let second = yield first + 2;
    yield second + 3;
}

let iterator = createIterator();
console.log(iterator.next());//返回yield 后面表达式的值
console.log(iterator.next(4));// 参数改变上一个yield后面表达式的值
console.log(iterator.next(5));
console.log(iterator.next());

3.async函数

// async函数
async function async1() {
    console.log("async1 start");
    await async2();
    console.log("async1 end");
}
async function async2() {
    return Promise.resolve().then(() => {
        console.log("async2 promise");
    })
}
async1();

async function f() {
    await Promise.reject('error');//await 后是reject,后序代码不会执行
    console.log(1);
    await 100;
}

// 后序代码执行,加try...catch
async function f() {
    await Promise.reject('error').catch(() => { });
    console.log(1);
    await 100;
}

async function f() {
    try {
        await Promise.reject('error');
    } catch (e) {

    } finally {

    }
    console.log(1);
    await 100;
}

f();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值