Javascript async/await

x33g5p2x  于2022-05-16 转载在 Java  
字(2.5k)|赞(0)|评价(0)|浏览(241)

在本教程中,您将借助示例了解 JavaScript 的 async/await 关键字。
    我们在函数中使用 async 关键字来表示该函数是一个异步函数。异步函数返回一个 promise。
    async 函数的语法是:

async function name(parameter1, parameter2, ...paramaterN) {
    // statements
}

这里,

  • name - 函数的名称
  • parameters - 传递给函数的参数
示例:异步函数
// async function example

async function f() {
    console.log('Async function.');
    return Promise.resolve(1);
}

f();

输出

Async function.

在上面的程序中,在函数之前使用 async 关键字来表示函数是异步的。
    由于这个函数返回一个 promise,你可以像这样使用链接方法 then() :

async function f() {
    console.log('Async function.');
    return Promise.resolve(1);
}

f().then(function(result) {
    console.log(result)
});

输出

Async function
1

在上面的程序中,f() 函数被解析并且 then() 方法被执行。

JavaScript await 方法

在 async(异步)函数中使用 await 关键字来等待异步操作。
    使用 await 的语法是:

let result = await promise;

使用 await 暂停 async 函数,直到 promise 返回结果(解析或拒绝)值。例如,

// a promise
let promise = new Promise(function (resolve, reject) {
    setTimeout(function () {
    resolve('Promise resolved')}, 4000); 
});

// async function
async function asyncFunc() {

    // wait until the promise resolves 
    let result = await promise; 

    console.log(result);
    console.log('hello');
}

// calling the async function
asyncFunc();

输出

Promise resolved
hello

在上面的程序中,将创建一个 Promise 对象,并在4000毫秒后解析它。这里,asyncFunc() 函数是使用 async 函数编写的。
    await 关键字等待 promise 完成(resolve 或 reject)。

let result = await promise;

因此,只有在 promise 值对 result 变量可用后,才会显示 hello。
    在上面的程序中,如果 await 没有使用,在 Promise resolved 之前显示 hello。

async/await 函数的工作原理

注意:您只能在 async 函数内部使用 await。
    async 函数允许异步方法以看似同步的方式执行。虽然操作是异步的,但似乎操作是以同步方式执行的。
    如果程序中有多个 Promise,这将很有用。例如,

let promise1;
let promise2;
let promise3;

async function asyncFunc() {
    let result1 = await promise1;
    let result2 = await promise2;
    let result3 = await promise3;

    console.log(result1);
    console.log(result1);
    console.log(result1);
}

在上面的程序中,await 等待每个 Promise 完成。

错误处理

使用 async 函数时,您以同步方式编写代码。您还可以使用 catch() 方法来捕获错误。例如,

asyncFunc().catch(
    // catch error and do something
)

处理错误的另一种方法是使用 try/catch 块。例如,

// a promise
let promise = new Promise(function (resolve, reject) {
    setTimeout(function () {
    resolve('Promise resolved')}, 4000); 
});

// async function
async function asyncFunc() {
    try {
        // wait until the promise resolves 
        let result = await promise; 

        console.log(result);
    }   
    catch(error) {
        console.log(error);
    }
}

// calling the async function
asyncFunc(); // Promise resolved

在上面的程序中,我们使用了 try/catch 块来处理错误。如果程序运行成功,它将进入 try 块。如果程序抛出错误,它将进入 catch 块。
    要详细了解更多 try/catch 信息,请访问 JavaScript try/catch。

使用 async 函数的好处
  • 代码比使用回调或 promise 更具可读性。
  • 错误处理更简单。
  • 调试更容易。

注意:这两个关键字 async/await 是在较新版本的JavaScript(ES8)中引入的。一些较旧的浏览器可能不支持使用 async/await。要了解更多信息,请访问JavaScript async/await 浏览器支持

上一教程 :JS Promise                                          下一教程 :JS setInterval()

参考文档

[1] Parewa Labs Pvt. Ltd. (2022, January 1). Getting Started With JavaScript, from Parewa Labs Pvt. Ltd: https://www.programiz.com/javascript/async-await

相关文章

微信公众号

最新文章

更多