带有async.js的简单控制台I / O失败

时间:2014-07-18 22:28:28

标签: node.js asynchronous callback

我正在做一个简单的练习,以了解async.js如何与node.js一起使用。该计划将询问工作小时数和小时费率,并将它们相乘以得出总收入。

代码如下所示:

var async =require('async');
var rl = require('readline');

//variables
var horas=0;
var rate =0;
var sueldo =0;

//readline
var int=rl.createInterface({
    input:process.stdin,
    output:process.stdout
});

var items = [
    {nombre: "worked hours", valor:horas},
    {nombre:"hourly rate",valor:rate}
];

async.each(items,
      function(item,callback)
      {
          int.question('Tell me your '+ item.nombre,function(data) 
                                                    { 
                                                        item.valor =Number(data);
                                                        callback(null);
                                                    });
      },
      function(err,results){
          console.log(results);
      });

我知道使用realine.question()可以实现同样的目的,但练习的目的是了解async.js的工作原理。

当我运行此代码时,只会调用集合中的第一个项目。无论我按Enter多少次,items数组中的第二项都不会被处理。我想我错过了一些非常基本的东西,但不知道是什么。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您需要在此使用async.eachSeries代替async.each,因为您希望问题一个接一个地发生,而不是同时发生:

async.eachSeries(items, function(item,callback) { ... }