2017-05-11 4 views
-1

현재 블루 버드에서 놀고 있습니다. 내 목표는 비동기 적으로이 모듈을 사용하여 함수를 실행하는 것입니다. 제 코드에 놓친 것이 있는지 궁금합니다. 내 스크립트가 예상대로 작동하지 않습니다. 아래 코드를 확인해 주시겠습니까? 감사!Node.js | 블루 버드 약속이 비동기식으로 작업을 실행하지 않습니다.

'use strict'; 

const Promise = require('bluebird'); 

// Generate alphabets 
function range(start, stop) { 
    const result = []; 

    for (let idx = start.charCodeAt(0), end = stop.charCodeAt(0); idx <= end; idx++) { 
     result.push(String.fromCharCode(idx)); 
    }; 

    return result.join(''); 
}; 

// List alphabets 
function listAz() { 
    const az = range('A', 'Z'); 

    Array.from(az).forEach(function(char) { 
     console.log(char); 
    }); 
}; 

// List numbers 
function listNum() { 
    for (let num = 1; num <= 10; num++) { 
     console.log(num); 
    }; 
}; 

function main() { 
    const listNumPromise = Promise.promisify(listNum); 
    const listAzPromise = Promise.promisify(listAz); 

    console.log('Hey!'); 
    console.log('Calling listNum now...'); 
    listNumPromise() 
     .then(function(data) { 
      console.log(data); 
     }) 
     .catch(function(err) { 
      console.log(err); 
     }); 

    console.log('Calling listAz now...'); 
    listAzPromise() 
     .then(function(data) { 
      console.log(data); 
     }) 
     .catch(function(err) { 
      console.log(err); 
     }); 
    console.log('Done!'); 
}; 

if (require.main == module) { 
    main(); 
}; 

는 여기에 내가 위의 코드를 사용하여 내 스크립트를 실행했을 때 결과입니다 :

Hey! 
Calling listNum now... 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
Calling listAz now... 
A 
B 
C 
D 
E 
F 
G 
H 
I 
J 
K 
L 
M 
N 
O 
P 
Q 
R 
S 
T 
U 
V 
W 
X 
Y 
Z 
Done! 

내 기대는 다음과 같습니다

Hey! 
Calling listNum now... 
Calling listAz now... 
Done 
1-10 
A-Z 
+0

병렬로 실행할 함수가 필요한 경우 promise.all()을 시도하십시오. – user93

+0

* "내 스크립트가 예상대로 작동하지 않습니다."* : 예상대로 출력을 추가 할 수 있습니까? (우리에게 말하지 않는다면, 우리는 당신이 무엇을 기대했는지 알 수 없습니다.) – trincot

+1

두 기능이 모두 동기식입니다. 블루 버드는 기적적으로 비동기로 만들 수 없습니다. – robertklep

답변

2

당신은 동기 기능 비동기 수 없습니다. listNum 함수는 루프 및 목록 번호 용입니다.

비동기 함수는 예를 들어 I/O, 데이터베이스 쿼리, HTTP 요청 및 항목으로 구성됩니다.

이러한 기능은 비동기식입니다.

2

async 라이브러리는 사용자가 원하는 것을 도와줍니다.