JavaScript(Node.js)에서 sleep() 경고

17424 단어 Node.jsJavaScriptsleep

택지보: "슬립()이 없어요!"



JavaScript 쓰기

"이 처리가 끝나면 1초 후에 다음 처리로 갈게요."
sleep(1);ReferenceError: sleep is not defined
(´・ω・‘)
나만 그런 적 있어?
Rubby, PHP, C++는 다 있지만 자바스크립트는 없다sleep().
가뜩이나 수요가 있는데 이뤄지지 않는 것은 어두운 곳에서 사용한다고 말하는 것과 같지만 그래도 사용하고 싶은 사람이 많아 투덜거리면 실속 있는 척하는 방법이 많다.
그래서 이번에 우리는 다양한 방법으로 실시sleep()했고 자바스크립트가 한 달 정도 겪은 전문가의 방식으로 장점과 단점을 생각했다.

개막사


작업 환경


Node.js v7.6.0

sleep()의 동작


이번에는 대부분의 프로그래밍 언어에서 이루어진 sleep() 와 마찬가지로 '지정한 초를 정지하는 프로그램의 함수' 를 노드로 설정합니다.js로 실현하다.
매개변수에 밀리초 값을 지정합니다.(예: sleep(2000)->2초 정지)

프로그램 내용

  • 출력 Free
  • sleep(1000)로 1초 일시 중지
  • 출력 "id"
  • sleep(2000) 2초 일시 중지
  • "기묘하다!"출력 종료
  • 이거야.

    1. setTimeout()만 사용해서 써보기


    우선 가장 정통적이다.
    setTimeout() 버전
    'use strict';
    
    console.log('フラ');
    setTimeout(() => {
        console.log('イド');
        setTimeout(() => {
            console.log('チキーン!');
        }, 2000);
    }, 1000);
    
    장점
  • 5개 중 가장 간단
  • 결점
  • 중첩이므로 프로세스 이해 어려움
  • 네스트가 깊어질 위험
  • 2. Date()로 써 보기


    여기 블로그.에 소개되어 있습니다.
    Date() 버전
    'use strict';
    
    console.log('フラ');
    sleep(1000);
    console.log('イド');
    sleep(2000);
    console.log('チキーン!');
    
    function sleep(time) {
        const d1 = new Date();
        while (true) {
            const d2 = new Date();
            if (d2 - d1 > time) {
                return;
            }
        }
    }
    
    장점
  • 단순
  • 동시 쓰기 가능 프로세스
  • 결점
  • 무조건 데이트(Date)를 계속 생성하면 어떨까...
  • 3. Promise로만 써보기


    ES6(ES2015)을 사용한 Promise 구현
    Promise Edition(좋지 않은 예)
    'use strict';
    
    Promise.resolve()
    .then(() => {
            console.log('フラ');
            sleep(1000)
                .then(() => {
                    console.log('イド');
                    sleep(2000)
                        .then(() => {
                            console.log('チキーン!');
                            Promise.resolve();
                        })
                })
        });
    
    function sleep(time) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve();
            }, time);
        });
    }
    
    장점
  • 쓰기 프로세스 동기화 가능
  • 결점
  • 덧붙인 어둠이 너무 깊다(VScode 자동 성형 결과)
  • 저는 단지 제 설치가 잘 안 된다고 생각했을 뿐입니다. 지적해 주십시오.
  • IE의 경우 이동하지 않음MDN
  • 메모 지적해 주셔서 감사합니다.
    Promise Edition(좋은 예)
    'use strict';
    
    console.log('フラ');
    sleep(1000).then(() => {
        console.log('イド');
        return sleep(2000);
    }).then(() => {
        console.log('チキーン!');
    });
    
    function sleep(time) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve();
            }, time);
        });
    }
    

    4. ASync 모듈로 써보기


    Node.js에서 인기 있는 async 모듈을 사용합니다.
    async 모듈 버전
    'use strict';
    const async = require('async');
    
    async.series([
        (callback) => {
            console.log('フラ');
            callback(null);
        },
        (callback) => {
            sleep(1000, () => callback(null));
        },
        (callback) => {
            console.log('イド');
            callback(null);
        },
        (callback) => {
            sleep(2000, () => callback(null));
        },
        (callback) => {
            console.log('チキーン!');
            callback(null);
        }
    ],
        () => { }
    );
    
    function sleep(time, callback) {
        setTimeout(() => {
            callback(null);
        }, time);
    }
    
    장점
  • 동시 쓰기 가능 프로세스
  • 결점
  • Node.js 의존성
  • 일일이 호출하기 귀찮아요
  • 5. Promise와 async/await로 써보기


    Node v7.6.0 ~ V8은 v5입니다.5야.( Change Log )
    즉, --harmony 없이도 async/await를 사용할 수 있다!잘 됐다!
    참조: Node.js v7.6.0 발매돼서 async/await 했어요.
    Promiise+async/await 버전
    'use strict';
    
    !async () => {
        console.log('フラ');
        await sleep(1000);
        console.log('イド');
        await sleep(2000);
        console.log('チキーン!');
    }();
    
    function sleep(time) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve();
            }, time);
        });
    }
    
    장점
  • 단순
  • 동시 쓰기 가능 프로세스
  • 결점
  • IE는 고사하고 엣지와 사파리도 움직이지 않는다MDN
  • 5 개 해볼게요.

  • setTimeout 전용()
    → 간단하고 간단한 것을 만들고 싶을 때 어떤 브라우저를 사용해도 된다.
  • Date()
    → 동상이지만 이쪽은 동시에 쓸 수 있어서 추천합니다.
  • Promise 전용
    → 음...아직 장점을 발견하지 못했다.
  • async 모듈
    → Node.js 한정.v7.6.0 이전에 움직였다면.
  • Promise + async/await
    → ES2017/v7.6.0 이후의 노드입니다.js를 사용할 수 있다면 망설임 없이 이걸 사용하세요.
  • 사실 원래는 "async/await 듀엣!"말하면서.최초로 계기 보도를 시도해 봤지만 브라우저별 대응 상황과 인코딩의 가독성을 고려하면 지금은 2다.가장 적절한 설명이겠지... 내 생각엔.
    ES2017의 규격은 엣지와 사파리에서도 사용할 수 있어 async/await로 쓸 수 있기를 간절히 기다리고 있다.
    전적으로 문외한의 시각으로 보도된 것이니 지적이 있으면 잘 부탁드립니다...

    좋은 웹페이지 즐겨찾기