avatar
fireworks99
keep hungry keep foolish

Async invoke

JS 中的异步调用是指在代码执行过程中,某些任务不会阻塞代码的执行,而是在后台继续执行,等待任务完成后再执行相应的回调或者继续执行后续代码。异步调用通常用于处理需要等待的操作,比如网络请求、定时器等。

以下是几种常见的 JS 异步调用方式:

  1. 回调函数:最基础的异步调用方式是使用回调函数。比如,在进行网络请求时,可以指定一个回调函数,当请求完成时调用这个回调函数处理返回的数据。

    javascriptCopy code
    function fetchData(url, callback) {
        // 模拟网络请求
        setTimeout(() => {
            const data = 'Some data from server';
            callback(data);
        }, 1000);
    }
    
    fetchData('https://example.com/api/data', (data) => {
        console.log('Received data:', data);
    });
    
  2. Promise:Promise 是一种更加灵活和易于处理的异步调用方式,它可以更好地处理异步操作的结果和错误。Promise 提供了 thencatch 方法来处理成功和失败的情况。

    javascriptCopy code
    function fetchData(url) {
        return new Promise((resolve, reject) => {
            // 模拟网络请求
            setTimeout(() => {
                const data = 'Some data from server';
                resolve(data);
                // 如果请求失败,可以调用 reject 方法,并传递错误信息
                // reject(new Error('Failed to fetch data'));
            }, 1000);
        });
    }
    
    fetchData('https://example.com/api/data')
        .then((data) => {
            console.log('Received data:', data);
        })
        .catch((error) => {
            console.error('Error fetching data:', error.message);
        });
    
  3. async/await:async/await 是 ES2017 引入的异步编程方式,它基于 Promise,提供了一种更加直观和简洁的写法,让异步代码看起来像同步代码。

    javascriptCopy code
    async function fetchData(url) {
        return new Promise((resolve, reject) => {
            // 模拟网络请求
            setTimeout(() => {
                const data = 'Some data from server';
                resolve(data);
            }, 1000);
        });
    }
    
    async function getData() {
        try {
            const data = await fetchData('https://example.com/api/data');
            console.log('Received data:', data);
        } catch (error) {
            console.error('Error fetching data:', error.message);
        }
    }
    
    getData();
    

以上是几种常见的 JS 异步调用方式,根据不同的场景和需求选择合适的方式来处理异步操作。

Site by Baole Zhao | Powered by Hexo | theme PreciousJoy