js中await的详细用法

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

file

基本用法

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函数中使用,并且需要正确地处理可能的错误。

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

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

44 + 78 =

ajax-loader