2017-05-11 43 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函數只是for循環和列出數字。

異步函數包括I/O,例如數據庫查詢,HTTP請求和東西。

所以這些功能將是異步的。

2

async圖書館將幫助你與你打算在這裏。