Categories: JS编程

js中await的详细用法

await是JavaScript中用于处理异步操作的一个关键字。它只能在async函数中使用,用于暂停当前的async函数执行,并等待Promise的解决或拒绝。一旦Promise解决,await表达式的值将是Promise解决的值。如果Promise被拒绝,await表达式将抛出拒绝的原因。

基本用法

async function simpleExample() {
    const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Promise resolved");
        }, 2000);
    });

    const result = await promise; // 这里会暂停函数执行,等待Promise解决
    console.log(result); // 输出 "Promise resolved"
}

simpleExample();

错误处理

使用try/catch块捕获await表达式中的错误。

async function errorHandlingExample() {
    const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
            reject("Promise rejected");
        }, 2000);
    });

    try {
        const result = await promise;
        console.log(result);
    } catch (error) {
        console.error(error); // 输出 "Promise rejected"
    }
}

errorHandlingExample();

在循环中使用await

在循环中使用await可以按顺序等待每个Promise

async function loopExample() {
    const promises = [1, 2, 3].map(num => 
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(num);
            }, 1000 * num);
        })
    );

    for (const promise of promises) {
        const result = await promise;
        console.log(result); // 按1, 2, 3的顺序输出
    }
}

loopExample();

在非async函数中使用await

在非async函数中,不能直接使用await,但可以使用then链来处理Promise

function nonAsyncExample() {
    const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Promise resolved");
        }, 2000);
    });

    promise.then(result => {
        console.log(result); // 输出 "Promise resolved"
    });
}

nonAsyncExample();

并行执行Promise

如果你有多个独立的Promise需要等待,可以使用Promise.all来并行执行它们。

async function parallelExample() {
    const promise1 = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Promise 1 resolved");
        }, 2000);
    });

    const promise2 = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Promise 2 resolved");
        }, 3000);
    });

    const [result1, result2] = await Promise.all([promise1, promise2]);
    console.log(result1); // 输出 "Promise 1 resolved"
    console.log(result2); // 输出 "Promise 2 resolved"
}

parallelExample();

await关键字是处理Promise的一种强大工具,它可以使异步代码看起来像同步代码。但是,我们需要注意它只能在async函数中使用,并且需要正确地处理可能的错误。

4.9
08
详解Python文件:.py、.ipynb、.pyi、.pyc、.pyd
如何在 Go 语言中实现 Server-Sent Events (SSE)
嘻嘻

嘻嘻IT: 笔者是一个工作七八年的程序猿老鸟,从事涉及的技术栈主要包括PHP、Linux、Devops等,喜欢研究新技术,尝试新技术,提升技术自动化和开发效率,致力于write less,do more! 技术每年都会层出不穷,领域划分的越来越细,不可能学习所有的东西,保持对技术的好奇心,理解技术中核心思想,做一个有深度,有思想的开发!

Recent Posts

为什么接收不到SMS-Activate的短信?

SMS-Activate是一个…

4小时 ago

Linux中你必须知道的5个压缩命令

Linux系统具有丰富的包和解…

21小时 ago

Shell脚本定时执行的三种方法

Shell脚本是Unix和Li…

21小时 ago

Linux中你必须知道的5个解压缩命令

Linux操作系统中有许多强大…

21小时 ago

Golang如何实现三元表达式?

三元表达式又被称为条件表达式,…

22小时 ago

还不知道Unix和Linux有哪些不同?

随着技术的进步和全球范围内的数…

1天 ago