node.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > node.js > Node.js和JS中async和await

一篇文章弄懂Node.js和Javascript中的async和await

作者:太阳照常升起--

Async/Await 是基于 Promise 的语法糖,它将异步代码转化为类似同步的书写风格,极大地提升了代码可读性,这篇文章主要介绍了Node.js和Javascript中async和await的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

JavaScriptNode.js 中,async/await 主要用于处理 异步操作。虽然它们都基于 Promise,但在 Node.js 中,async/await 往往用于处理 I/O 操作、文件操作、数据库查询等,而在 浏览器中的 JavaScript,它更多应用于 AJAX 请求、DOM 操作等场景。

1. 在 JavaScript 中的应用(浏览器):

在浏览器端,async/await 主要用来处理 异步操作,如 AJAX 请求获取外部数据处理异步事件 等。以下是几个常见的应用场景:

示例 1:使用async/await发送异步请求

假设我们想要通过 fetch() 请求获取数据,使用 async/await 可以让代码看起来更简洁。

async function fetchData() {
  try {
    const response = await fetch('https://jsonplaceholder.typicode.com/posts');
    const data = await response.json();
    console.log('数据获取成功:', data);
  } catch (error) {
    console.log('请求失败:', error);
  }
}

fetchData();

代码解析:

示例 2:处理多个异步操作并行执行

有时你需要同时执行多个异步操作,async/await 使得并行操作的处理变得更加简单。使用 Promise.all() 可以并行执行多个异步任务。

async function fetchMultipleData() {
  try {
    const [users, posts] = await Promise.all([
      fetch('https://jsonplaceholder.typicode.com/users').then(res => res.json()),
      fetch('https://jsonplaceholder.typicode.com/posts').then(res => res.json())
    ]);
    console.log('用户数据:', users);
    console.log('帖子数据:', posts);
  } catch (error) {
    console.log('发生错误:', error);
  }
}

fetchMultipleData();

代码解析:

2. 在 Node.js 中的应用:

Node.js 中,async/await 主要用于处理文件操作、数据库查询、HTTP 请求等异步任务,尤其是对 I/O 操作 的处理。在 Node.js 中,很多核心模块(如 fshttp 等)原本使用回调函数来处理异步任务,而 async/await 使得异步操作更易于管理和理解。

示例 1:文件操作

使用 Node.js 的 fs 模块进行异步文件操作时,可以使用 async/await 简化代码,避免回调地狱。

const fs = require('fs').promises;  // 使用 fs.promises API,返回的已经是 Promise

async function readFile() {
  try {
    const data = await fs.readFile('example.txt', 'utf-8');
    console.log('文件内容:', data);
  } catch (error) {
    console.log('读取文件失败:', error);
  }
}

readFile();

代码解析:

示例 2:数据库操作(使用mongoose)

在使用 MongoDB 数据库时,async/await 非常适合处理数据库的异步操作。假设我们使用 mongoose(一个 MongoDB 的 ODM)来查询数据库:

const mongoose = require('mongoose');
const User = mongoose.model('User', new mongoose.Schema({ name: String }));

async function getUsers() {
  try {
    const users = await User.find();  // 使用 async/await 获取所有用户
    console.log('用户列表:', users);
  } catch (error) {
    console.log('数据库查询失败:', error);
  }
}

getUsers();

代码解析:

示例 3:HTTP 请求处理

Node.js 用 http 模块处理异步 HTTP 请求时,可以结合 async/await 来提高代码可读性。

const http = require('http');

async function requestHandler(req, res) {
  try {
    const data = await fetch('https://jsonplaceholder.typicode.com/posts');
    const jsonData = await data.json();
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify(jsonData));
  } catch (error) {
    res.writeHead(500, { 'Content-Type': 'text/plain' });
    res.end('发生错误');
  }
}

const server = http.createServer(requestHandler);
server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

代码解析:

总结:

async/await的应用:

async/await与Promise:

到此这篇关于Node.js和Javascript中async和await的文章就介绍到这了,更多相关Node.js和JS中async和await内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文