Skip to content

异步编程

JavaScript 示例

以下是JavaScript中异步编程的示例代码:

js
// title: 异步编程

// 模拟API请求函数
function fetchData(url, delay = 1000) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (url.includes('error')) {
        reject(new Error(`请求失败: ${url}`));
      } else {
        resolve(`成功获取数据: ${url}`);
      }
    }, delay);
  });
}

// 1. 基本的async/await用法
async function basicAsyncAwait() {
  console.log('开始请求数据...');
  try {
    const result = await fetchData('https://api.example.com/data');
    console.log(result);
    console.log('请求完成!');
  } catch (error) {
    console.error('请求出错:', error.message);
  }
}

// 2. 并行请求
async function parallelRequests() {
  console.log('\n开始并行请求...');
  try {
    const [result1, result2, result3] = await Promise.all([
      fetchData('https://api.example.com/data1', 1500),
      fetchData('https://api.example.com/data2', 1000),
      fetchData('https://api.example.com/data3', 800)
    ]);
    console.log('并行请求结果:', result1, result2, result3);
    console.log('所有请求完成!');
  } catch (error) {
    console.error('并行请求出错:', error.message);
  }
}

// 3. 串行请求
async function sequentialRequests() {
  console.log('\n开始串行请求...');
  try {
    const result1 = await fetchData('https://api.example.com/data1', 500);
    console.log(result1);
    
    const result2 = await fetchData('https://api.example.com/data2', 500);
    console.log(result2);
    
    const result3 = await fetchData('https://api.example.com/data3', 500);
    console.log(result3);
    
    console.log('所有串行请求完成!');
  } catch (error) {
    console.error('串行请求出错:', error.message);
  }
}

// 4. 使用Promise.race获取最快的响应
async function raceRequests() {
  console.log('\n开始竞争请求...');
  try {
    const result = await Promise.race([
      fetchData('https://api.example.com/slow', 2000),
      fetchData('https://api.example.com/fast', 500),
      fetchData('https://api.example.com/medium', 1000)
    ]);
    console.log('最快响应:', result);
  } catch (error) {
    console.error('竞争请求出错:', error.message);
  }
}

// 5. 错误处理
async function errorHandling() {
  console.log('\n测试错误处理...');
  try {
    const result = await fetchData('https://api.example.com/error');
    console.log(result);
  } catch (error) {
    console.error('捕获到错误:', error.message);
    // 可以在这里进行错误恢复或记录
  } finally {
    console.log('无论成功失败都会执行的代码');
  }
}

// 执行所有示例
async function runAllExamples() {
  await basicAsyncAwait();
  await parallelRequests();
  await sequentialRequests();
  await raceRequests();
  await errorHandling();
}

// 调用示例
runAllExamples();

说明

该示例展示了不同语言中异步编程的基本用法和常见操作。

主要功能

  • 请根据实际代码内容添加功能说明

使用场景

  • 请根据实际代码内容添加使用场景

相关链接