2017-05-11 68 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图书馆将帮助你与你打算在这里。