웹 프론트엔드 JS 튜토리얼 간단한 Node.js 비동기 작업 관리자 Sharing_javascript 기술

간단한 Node.js 비동기 작업 관리자 Sharing_javascript 기술

May 16, 2016 pm 04:50 PM
node.js 비동기식

최근 nodejs에 대해 글을 많이 썼는데, 처음에는 비동기 작업이 적은 것을 접했습니다. API를 확인해보니 문제를 줄이기 위해 동기 작업이 있다는 것을 알았기 때문입니다. , 방금 동기식을 사용했는데, 점차적으로 이것이 문제가 되지 않는다는 것을 알게 되었습니다. 좋은 비동기식 기능은 필요하지 않지만 동기식 기능을 사용해야 한다는 점은 정말 당황스럽고 많은 것들이 동기식 API가 없습니다.

알겠습니다! 비동기적으로 작성하다 보니 이런 코드가 점차 등장하게 되었습니다. . .

코드 복사 코드는 다음과 같습니다.

mysql.query('xxxx'). on('성공', function(){
mysql.query('xxxx').on('성공', function(){
mysql.query('xxxx').on('성공', function() {
mysql.query('xxxx').on('성공', function(){
mysql.query('xxxx').on('성공', function(){
mysql.query('xxxx').on('성공', function(){
                                                                                   });
});
});
});

글쎄요, 이대로 계속하면 코드가 얼마나 추악해질지 보셨을 겁니다. 노부인의 족보처럼 보일 것이므로 다음과 같은 비동기 작업 관리자가 생성됩니다. 작고 정교합니다. 헤헤, 확실히 충분합니다. 코드에 대해 이야기해 보겠습니다.
과 같이 코드를 강조표시하세요.
TODO: 포괄적이지 않음, 예를 들어 오류가 처리되지 않음


코드 복사 코드는 다음과 같습니다.

/*
* 비동기 관리자
* 작성자 : jser.me
*
* 사용법:
* var asyncMg = require('./AsyncManager') ;
* asyncMg
* .push(function(next){
* some_aysnc_method().on('success'{
* next();
*                                                                           .다음( );
* })
* })
* .push( ... )
* .run() //실행
* .on('success', function() {
* allThings_is_down();
*    });
function typeOf( obj ){
return Object.prototype.toString.call( obj ).match(/[object ([^]]*)]/)[1];
}

함수 AsyncManager( arg ){
this.execArrys = [];
this.push( arg );
}
//시스템에서 제공하는 상속 방법 사용

require('util').inherits( AsyncManager, require('events').EventEmitter );

//성공적으로 실행된 함수 수 표시

AsyncManager.prototype.succCount = 0;



//추가
AsyncManager.prototype.push = function( arg ) {

var This = this;
if( typeOf(arg) == 'Array' ){

arg.forEach( function(v,i){

This.execArrys.push( v );
          });

이것을 반환합니다. //1개 연결

};

//실행

AsyncManager.prototype.run = function(){

var self = this;

If( this.succCount == this.execArrys.length ) {
//모든 함수가 성공적으로 실행된 후 이벤트가 트리거됩니다.
this.emit( ​​​​'success' );
} else {
this.execArrys[ this.succCount ]( self.run.bind( self ) );
}

this.succCount ;
return this; //1개 연결

};


exports = module.exports = function( arg ){
return new AsyncManager( arg );

}





본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Node의 메모리 제어에 관한 기사 Node의 메모리 제어에 관한 기사 Apr 26, 2023 pm 05:37 PM

Node의 메모리 제어에 관한 기사

Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Apr 24, 2023 pm 05:49 PM

Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다.

노드의 버퍼에 대해 자세히 알아보기 노드의 버퍼에 대해 자세히 알아보기 Apr 25, 2023 pm 07:49 PM

노드의 버퍼에 대해 자세히 알아보기

빠른 적용: 여러 파일의 PHP 비동기 HTTP 다운로드에 대한 실제 개발 사례 분석 빠른 적용: 여러 파일의 PHP 비동기 HTTP 다운로드에 대한 실제 개발 사례 분석 Sep 12, 2023 pm 01:15 PM

빠른 적용: 여러 파일의 PHP 비동기 HTTP 다운로드에 대한 실제 개발 사례 분석

Swoole이 비동기 SMTP 작업을 지원하는 방법 Swoole이 비동기 SMTP 작업을 지원하는 방법 Jun 25, 2023 pm 12:24 PM

Swoole이 비동기 SMTP 작업을 지원하는 방법

PHP 비동기 코루틴 개발: 데이터 캐싱 속도 향상 및 읽기 및 쓰기 작업 PHP 비동기 코루틴 개발: 데이터 캐싱 속도 향상 및 읽기 및 쓰기 작업 Dec 18, 2023 pm 01:09 PM

PHP 비동기 코루틴 개발: 데이터 캐싱 속도 향상 및 읽기 및 쓰기 작업

Python asyncio 고급 가이드: 초보자부터 전문가까지 Python asyncio 고급 가이드: 초보자부터 전문가까지 Mar 04, 2024 am 09:43 AM

Python asyncio 고급 가이드: 초보자부터 전문가까지

Vue 문서에서 비동기 요청 기능을 사용하는 방법 Vue 문서에서 비동기 요청 기능을 사용하는 방법 Jun 20, 2023 pm 05:55 PM

Vue 문서에서 비동기 요청 기능을 사용하는 방법

See all articles