在node.js中完成所有switch分支后的回调

时间:2017-06-16 07:23:05

标签: javascript node.js

我在node.js中有一个简单的函数,其中switch为for循环:

function bodybuilder(queryArea,callback)
{
    var ret='';
    for (var attributename in queryArea.query)
        {
                switch(attributename)
                {
                    case 'username':
                    {
                        ret+="Username branch added";
                    }
                    break;
                    case 'what':
                    {
                                filename="./demo.html";
                                fs.readFile(filename, function (err, data)
                                        {if (err) throw(err);
                                        var pom=data.toString();
                                        ret=ret+pom;
                                        });
                    }
                    break;
                    case 'color':
                    {
                        ret+="Color branch added";
                    }
                    break;
                    default: ret+="Unknown query";
                }
        }
    return callback(ret);
}

访问每个交换机分支并添加一些返回值。

其中一个分支读取异步文件并将其内容添加到返回值。

如何在完成所有切换分支后回调整个函数并返回值?这意味着,甚至在完成处理文件的异步操作之后呢? Node显然没有等待。

这是一个学习的例子,所以在这方面显示原则是最好的。

1 个答案:

答案 0 :(得分:0)

for循环中有一个异步代码,你需要从异步开关案例中调用回调函数,因为它将在执行完整的for循环后执行。

使用以下代码段:

function bodybuilder(queryArea,callback)
{
   var ret='';
   for (var attributename in queryArea.query)
      {
            switch(attributename)
            {
                case 'username':
                {
                    ret+="Username branch added";
                }
                break;
                case 'what':
                {
                            filename="./demo.html";
                            fs.readFile(filename, function (err, data)
                                    {if (err) throw(err);
                                    var pom=data.toString();
                                    ret=ret+pom;
                                    callback(ret); 
                             });
                }
                break;
                case 'color':
                {
                    ret+="Color branch added";
                }
                break;
                default: ret+="Unknown query";
            }
      }
}