>  기사  >  웹 프론트엔드  >  Nodejs의 콜백에 대한 간략한 토론

Nodejs의 콜백에 대한 간략한 토론

青灯夜游
青灯夜游앞으로
2021-05-19 09:47:252556검색

이 글에서는 Nodejs의 콜백을 소개하겠습니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

Nodejs의 콜백에 대한 간략한 토론

추천 학습: "nodejs 튜토리얼"

콜백이란 무엇인가요? 당연히 문자 그대로의 의미는 콜백입니다callback?  很显然,字面意思就是回调

那为什么在Node中需要回调操作呢?了解过Node的同学可能会知道,就是为处理异步操作的结果。

下面就是针对这个问题来详细说一下:

在说异步操作的callback回调之前,我们先看一下同步的操作模式:

function processData () {
  var data = fetchData ();
  data += 1;
  return data;
}

这种同步模式一般情况下可以正常工作,在其他开发环境下这种操作也是很典型的。然后可以明显的看到fectData方法如果在加载数据的时候很耗时,就会造成在数据同步加载完成之前整个程序阻塞的情况。

Node.js是一个异步的操作处理的平台,其使用callback回调的形式将不会被类似于文件I/O操作等阻塞。一个回调函数就是在一个给定的任务执行完成之后执行的函数;这种方式可以避免一些阻塞的情况,同时允许其他的代码继续执行。

我们使用Node.js的回调的形式去处理上面的同步操作fetchData耗时的情况:

function processData (callback) {
  fetchData(function (err, data) {
    if (err) {
      console.log("An error has occurred. Abort everything!");
      return callback(err);
    }
    data += 1;
    callback(data);
  });
}

一开始看的话,确实会觉得有些复杂,不太容易理解,但是确实很重要,因为回调处理异步操作是Node.js的基础。

callback回调的意思就是:你的异步操作完成之后,你就执行我的callback回调里面的内容。

Node.js这种回调处理异步操作的形式允许我们尽可能多的处理并发操作(操作类似于IO操作)

举个例子:

在一个web服务上,前面有几个请求,由于某种原因阻塞了,同时之后还会有成百上千的请求正在发出;

Node.js会如何处理这种异步阻塞的情况呢?

其会执行异步的执行阻塞查询,使之后的查询请求可以正常工作,而不是说等待前面的阻塞请求结束之后,才去处理之后的请求。

下面是是使用异步函数的典型格式:

function asyncOperation ( a, b, c, callback ) {
  // ... lots of hard work ...
  if ( /* an error occurs */ ) {
    return callback(new Error("An error has occurred"));
  }
  // ... more work ...
  callback(null, d, e, f);
}

asyncOperation ( params.., function ( err, returnValues.. ) {
  //This code gets run after the async operation gets run
});

callback一般是异步函数的做后一个参数,当异步操作结束之后,去调用这个callback

一般情况下,callback的第一个参数是error

如果异步操作遇到了错误,就会去调用callback,第一个参数是一个Error对象;反之,第一个errornull

그렇다면 Node에서 콜백 작업이 필요한 이유는 무엇일까요? Node를 아는 학생들은 그것이 비동기 작업의 결과를 처리하는 것임을 알 수 있습니다.

다음은 이 문제에 대한 자세한 설명입니다.

비동기 작업의 콜백 콜백에 대해 이야기하기 전에 먼저 동기 작업 모드를 살펴보겠습니다.

rrreee이 동기화 모드는 일반적으로 정상적으로 작동하며 이 동작은 다른 개발 환경에서도 일반적입니다. 그러면 데이터를 로드할 때 fectData 메서드에 시간이 많이 걸리면 데이터 동기화 로드가 완료되기 전에 전체 프로그램이 차단된다는 점을 분명히 알 수 있습니다.

Node.js는 비동기 작업 처리 플랫폼으로 콜백 사용이 파일 I/O 작업에 의해 차단되지 않습니다. 콜백 함수는 특정 작업이 완료된 후에 실행되는 함수입니다. 이 접근 방식은 다른 코드가 계속 실행되도록 허용하면서 일부 차단 상황을 방지합니다. 🎜🎜위 동기화 작업 fetchData의 시간이 많이 걸리는 상황을 처리하기 위해 Node.js의 콜백 형식을 사용합니다. 🎜rrreee🎜얼핏 보면 조금 복잡해 보이고 이해하기 쉽지 않습니다. , 그러나 비동기 작업을 처리하기 위한 콜백은 Node.js의 기본이기 때문에 정말 중요합니다. 🎜🎜콜백콜백의 의미는 비동기 작업이 완료된 후 내 콜백 콜백의 콘텐츠를 실행한다는 것입니다. 🎜🎜Node.js 이러한 형태의 콜백 처리 비동기 작업을 통해 가능한 한 많은 동시 작업을 처리할 수 있습니다(작업은 IO 작업과 유사합니다). 🎜🎜예: 🎜🎜웹 서비스에서는 앞에 여러 요청이 있습니다. 어떤 이유로든 차단되었으며 앞으로 수백 또는 수천 개의 요청이 발행될 것입니다. 🎜🎜Node.js는 이 비동기 차단 상황을 어떻게 처리합니까? 🎜🎜다음 요청을 처리하기 전에 이전 차단 요청이 끝날 때까지 기다리는 대신 후속 쿼리 요청이 정상적으로 작동할 수 있도록 차단 쿼리를 비동기식으로 실행합니다. 🎜🎜다음은 비동기 함수를 사용하는 일반적인 형식입니다. 🎜rrreee🎜콜백은 일반적으로 비동기 함수의 마지막 매개변수입니다. 비동기 작업이 끝나면 이 콜백을 호출하세요. . 🎜🎜일반적으로 콜백의 첫 번째 매개변수는 error입니다.🎜🎜비동기 작업에서 오류가 발생하면 콜백이 첫 번째 매개변수로 호출됩니다. Error 개체입니다. 그렇지 않은 경우 첫 번째 errornull이고 다른 매개변수는 정상적으로 반환됩니다. 🎜🎜🎜영어 원본 주소: https://nodejs.org/en/knowledge/getting-started/control-flow/what-are-callbacks/🎜🎜🎜더 많은 프로그래밍 관련 지식을 보려면 다음을 방문하세요: 🎜프로그래밍 비디오🎜 ! ! 🎜

위 내용은 Nodejs의 콜백에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제