📜  node js请求异步等待 - Javascript(1)

📅  最后修改于: 2023-12-03 15:17:53.678000             🧑  作者: Mango

Node.js请求异步等待

在Node.js中,我们经常需要进行异步操作,如向API发送请求、读取文件、与数据库交互等等。这些操作需要一些时间才能完成,我们不能在等待操作完成时阻塞主线程。因此,我们需要一种异步等待的方式,以便我们能够在操作完成后得到结果。

回调函数

在Node.js中,最常见的异步等待方式是通过回调函数。回调函数可以在操作完成后执行,并将结果作为参数传递给它。

下面是一个发送HTTP请求的例子,使用回调函数来处理响应:

const https = require('https');

https.get('https://jsonplaceholder.typicode.com/todos/1', (response) => {
  let data = '';
  response.on('data', (chunk) => {
    data += chunk;
  });
  response.on('end', () => {
    console.log(JSON.parse(data));
  });
}).on("error", (error) => {
  console.log("Error: " + error.message);
});

在这个例子中,我们发送了一个HTTPS请求,当响应数据可用时,回调函数会被调用,并将响应数据作为参数传递给它。然后,我们将响应数据解析为JSON并输出到控制台上。

Promise

除了回调函数之外,我们还可以使用Promise来等待异步操作的结果。Promise是一种在JavaScript中处理异步操作的机制,可以让我们更轻松地组织和处理异步代码。

下面是一个使用Promise的例子,读取一个文件并输出其内容:

const fs = require('fs');

function readFile(filePath) {
  return new Promise((resolve, reject) => {
    fs.readFile(filePath, (err, data) => {
      if (err) {
        reject(err);
      } else {
        resolve(data);
      }
    });
  });
};

readFile('./example.txt').then((data) => {
  console.log(data.toString());
}).catch((err) => {
  console.log(err);
});

在这个例子中,我们使用fs.readFile()函数来读取文件,当操作完成时,Promise的状态会被设置为已解决。然后我们可以使用.then()方法来处理结果,如果在操作期间发生错误,Promise的状态会被设置为已拒绝,我们可以使用.catch()方法来处理错误。

Async/Await

除了回调函数和Promise之外,我们还可以使用ES2017中引入的async/await来等待异步操作的结果。async/await是一种让异步代码看起来像同步代码的机制。

下面是一个使用async/await的例子,发送一个HTTP请求并输出响应:

const https = require('https');

async function getRequest() {
  const response = await new Promise((resolve, reject) => {
    https.get('https://jsonplaceholder.typicode.com/todos/1', (response) => {
      resolve(response);
    }).on("error", (error) => {
      reject(error);
    });
  });
  let data = '';
  response.on('data', (chunk) => {
    data += chunk;
  });
  await new Promise((resolve, reject) => {
    response.on('end', () => {
      console.log(JSON.parse(data));
      resolve();
    });
  });
};

getRequest();

在这个例子中,我们使用async/await来等待HTTP请求的结果。我们首先创建一个Promise来发送请求,然后使用await等待结果。结果是响应对象,我们可以将其存储在变量中,并使用另一个Promise等待响应体的数据。最后,我们在控制台上输出解析后的数据。

总结

回调函数、Promise和async/await是Node.js中处理异步操作的三种不同方式。选择合适的方式取决于你的编程风格和所需的功能。最重要的是,当你进行异步操作时,始终记得使用这些机制来等待结果,以避免阻塞主线程。