2017-05-11 12 views
-1

私は現在Bluebirdで遊んでいます。私の目的は、このモジュールを使用して非同期に関数を実行することです。私が自分のコードに入れなかったことがあるかどうか疑問に思っていました。私のスクリプトは期待どおりに動作しません。以下のコードを確認してください。ありがとう!Node.js | Bluebird Promiseは非同期にタスクを実行しません

'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関数はループとリスト番号の単なるものです。

非同期機能は、たとえばデータベースのクエリ、HTTPリクエスト、およびI/Oなどで構成されます。

これらの関数は非同期になります。

2

asyncライブラリは、あなたがここで意図したものをお手伝いします。

関連する問題