JS - 异步操作(Promise+then 和 async+await)

Promise

想了解Promise可传送至:Promise

async+await

想了解async+await可传送至:async+await

用法举例:

//async 函数(包含函数语句、函数表达式、Lambda表达式)会返回一个 Promise 对象,如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。
async function testAsync() {
    return "Hello Async!"
}
console.log(testAsync()); // print:Promise { 'Hello Async!' }

// new Promise()里面的内容会立即执行
// 为了实现调用时执行,Promise一般都作为函数的返回值
function test() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            let name = "zs";
            resolve(name);
        }, 2000);
    })
}
async function main() {
    console.log(test()); // print: Promise { <pending> }

    console.log("then(): ", test().then()); // then()返回结果也是一个Promise

    // 以下两种方式效果一样:Promise + then
    // test().then((data) => {
    //     console.log(data);
    // })

    // async + await:   (其实就是Promise + then的语法糖)
    let data = await test(); // await会拿到resolve的结果,且必须用在async函数中
    console.log(data); // 两秒后打印:zs
}
main();
// ==注意:==
// await 命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try...catch 代码块中。

因为 async 函数返回一个 Promise 对象,所以 await 可以用于等待一个 async 函数的返回值——这也可以说是 await 在等 async 函数,但要清楚,它等的实际是一个返回值。注意到 await 不仅仅用于等 Promise 对象,它可以等任意表达式的结果,所以,await 后面实际是可以接普通函数调用或者直接量的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值