>  기사  >  웹 프론트엔드  >  node.js_node.js의 비동기 비동기 프로그래밍에 대한 간략한 토론

node.js_node.js의 비동기 비동기 프로그래밍에 대한 간략한 토론

WBOY
WBOY원래의
2016-05-16 15:35:461049검색

1. 비동기 프로그래밍이란?

비동기 프로그래밍이란 비동기 I/O 및 기타 요인으로 인해 실행 결과를 동기적으로 얻을 수 없는 경우를 말합니다.
콜백 함수에서 다음 작업을 수행하는 코딩 스타일, setTimeout 함수, ajax 요청 등과 같은 일반적인 함수입니다.

예:

for (var i = 1; i <= 3; i++) {
setTimeout(function(){
console.log(i);
}, 0);
};

여기 있는 대부분의 사람들은 출력이 123 또는 333이라고 생각할 것입니다. 실제로는 444가 출력됩니다

여기서 비동기 프로그래밍에 대해 이야기하고 있습니다.

고급 기능의 정의

여기서 고급 기능에 대해 이야기하는 이유는 고급 기능이 비동기 프로그래밍의 기초이기 때문입니다.

그렇다면 고급 기능이란 무엇일까요?
실제로 고급 함수는 함수를 매개변수나 반환 값으로 사용합니다.

예:

function test(v){
return function(){
return v;
}
}

위는 함수를 반환값으로 사용하는 것입니다.

2. 공정관리

기능은 다음과 같습니다.
시리즈
폭포
평행
병렬 제한

시리즈 기능 직렬 실행

순차적으로 실행하는 기능입니다.

async.series({
  one: function(callback){
    callback(null, 1);
  },
  two: function(callback){
    callback(null, 2);
  }
},function(err, results) {
  console.log(results);
});

출력: {1:1, 2:2}

시리즈 함수의 첫 번째 매개변수는 배열 또는 JSON 객체일 수 있습니다.
다양한 매개변수 유형은 반환되는 데이터의 형식에 영향을 미칩니다.

폭포 기능 폭포 흐름

폭포와 시리즈 기능은 유사한 점이 많으며 둘 다 순서대로 실행됩니다.
차이점은 Waterfall의 각 함수에서 생성된 값이 다음 함수로 전달되는 반면 Series에는 이 함수가 없다는 것입니다.

async.waterfall([
  function(callback){
    callback(null, 'one', 'two');
  },
  function(arg1, arg2, callback){
   // arg1 now equals 'one' and arg2 now equals 'two'
    callback(null, 'three');
  },
  function(arg1, callback){
    // arg1 now equals 'three'
    callback(null, 'done');
  }
], function (err, result) {
  // result now equals 'done'
  console.log(result);
});

폭포의 작업 매개변수는 배열 유형만 될 수 있다는 점에 유의해야 합니다.
중간에 함수 오류가 발생하면 해당 오류가 최종 콜백에 직접 전달되고 결과가 삭제되며 후속 함수는 더 이상 실행되지 않습니다.

병렬(작업, [콜백])

병렬 기능은 여러 기능을 병렬로 실행합니다. 각 기능은 다른 기능이 먼저 실행될 때까지 기다리지 않고 즉시 실행됩니다.
최종 콜백에 전달된 배열의 데이터는 실행이 완료된 순서가 아닌 작업에 선언된 순서대로 되어 있습니다.

async.parallel([
  function(callback){
    callback(null, 'one');
  },
  function(callback){
    callback(null, 'two');
  }
],
function(err, results){

});

tasks 매개변수는 시리즈 함수와 마찬가지로 배열 또는 json 객체일 수 있습니다.
작업 매개변수 유형에 따라 반환되는 결과의 형식도 달라집니다.

parallelLimit(작업, 제한, [콜백])

parallelLimit 함수는 병렬과 유사하지만 추가 매개변수 제한이 있습니다.
제한 매개변수는 작업을 무제한 동시성이 아닌 특정 수의 동시 작업으로 제한합니다.

async.parallelLimit([
  function(callback){
    callback(null, 'one');
  },
  function(callback){
    callback(null, 'two');
  }
],

2,

function(err, results){
  console.log(results);
});

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