async函数(asynchronous 异步的)

本文详细介绍了JavaScript中async函数的工作原理及应用。通过对比同步与异步操作,解释了async函数如何简化异步流程控制,并通过具体示例展示了如何使用async/await实现异步任务的顺序执行。

async函数(asynchronous 异步的)

同步:

console.log(1);
console.log(2);
console.log(3);
console.log(4);
//依次打印1 2 3 4;

异步 ajax 文件读取io操作:

console.log(1);
    console.log(2);
    setTimeout(function(){
        console.log(3000);
    },3000);
    console.log(3);
    console.log(4);
    //先打印1 2 3 4,隔三秒后打印3000;

async函数返回的是resolve状态的Promise对象:

async function fn(){
        return "abc";
    }
    let result=fn();
    console.log(result);//打印:Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: "abc"}。

Promise 对象:

let p = new Promise(function(resolve,reject){
        resolve("abc");
    });
            
    p.then(function(data){
        console.log(data);//打印abc。
    });

async函数里面的返回值传递给then方法:

async function fn(){
        return "123";
    }
    let p1 = fn();
    p1.then(function(data){
        console.log(data);//打印123.
    });

async函数用来处理异步:

function one(){
        return new Promise(function(resolve,reject){
            setTimeout(function(){
            console.log("one_3000");
            resolve("one_3000");
            },3000);
        })
    }
            
    function two(){
        return new Promise(function(resolve,reject){
            setTimeout(function(){
            console.log("two_2000");
            resolve("two_2000");
            },2000);
        })
    }
            
//await只能出现在异步函数里面, 
    async function shunxu(){
        console.log("start");
        let r1 = await one();
        console.log(r1);
        let r2 = await two();
        console.log(r2);
        return "end";
    }
        let p3 = shunxu();
        p3.then(r=>{
            console.log("结束");
        });
            
    //先打印start,三秒后打印两次one_3000,打印完one_3000然后隔两秒打印两次two_2000和结束;
<think>好的,用户问的是“Async是同步还是异步”。首先,我要确定用户的问题中的“Async”具体指什么。在JavaScript中,async通常指async函数,或者异步编程的概念。 首先,我需要解释清楚async函数的行为。Async函数是ES2017引入的,用于简化Promise的使用。Async函数内部使用await来暂停执行,直到Promise解决。这属于异步操作,因为代码不会阻塞,而是等待Promise的结果,同时让出事件循环去执行其他任务。 然后,需要区分同步和异步的概念。同步代码按顺序执行,阻塞后续代码直到当前任务完成。异步代码则不会阻塞,任务完成后通过回调、Promise等机制处理结果。 可能用户对async/await的机制有误解,认为看起来像同步代码的结构就是同步执行。需要澄清虽然async函数使用同步的写法,但实际执行是异步的,不会阻塞主线程。 接着,应该给出示例代码,展示async函数异步特性。比如,在async函数中使用await,然后输出日志,显示执行顺序。这样用户可以看到,即使代码看起来顺序执行,但实际输出顺序可能不同,证明其异步性。 最后,考虑用户可能的后续问题,比如async函数返回什么,await的作用,错误处理等,准备相关问题。</think><< Async异步)是异步操作。在JavaScript中,`async`关键字用于定义异步函数,这种函数会隐式返回一个Promise对象。异步函数内部可以使用`await`关键字暂停函数的执行,直到等待的Promise被解决(resolved)或拒绝(rejected),但不会阻塞主线程的其他操作,因此整体执行流程仍然是异步的。 **解释**: - **同步(Synchronous)**:代码按顺序执行,必须等待当前任务完成才能执行下一个任务。例如:`for`循环会阻塞后续代码的执行。 - **异步Asynchronous)**:代码不会等待耗时操作(如网络请求、定时器)完成,而是通过回调、Promise或`async/await`机制在操作完成后处理结果。例如:`setTimeout`或`fetch`是非阻塞的。 **示例代码**: ```javascript async function fetchData() { console.log("开始请求数据"); const response = await fetch('https://api.example.com/data'); // 异步操作,不会阻塞主线程 const data = await response.json(); console.log("数据获取完成"); } console.log("程序启动"); fetchData(); console.log("继续执行其他任务"); // 输出顺序: // 程序启动 // 开始请求数据 // 继续执行其他任务 // 数据获取完成(在请求完成后才输出) ``` **关键点**: 1. `async`函数本质是异步的,即使内部使用`await`看起来像同步代码。 2. `await`会暂停当前`async`函数的执行,但不会阻塞主线程的其他任务。 3. 异步操作通过事件循环(Event Loop)机制处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值