Nodejs循环使用回调函数

时间:2016-05-21 08:26:22

标签: javascript node.js callback

我是nodejs回调函数的新手。我必须在两个价格范围之间找到电话列表,如果获得的列表中没有15个电话,我必须更改价格范围,直到我有15个电话。实际上我编写了从另一个文件中的数据库中搜索手机的功能,从该文件中我将回调发送到调用函数。在我收到回调后,如果数组大小小于15,我必须检查数组大小,然后更改价格范围,并且必须调用相同的函数,如递归或循环。我无法处理回调函数。请帮我写出正确的代码。

 while(true ){
            console.log("around came")
             Search.findBestMobile(context.end_price , context.start_price , function(data){
                 console.log("Best Mobile");
                 size = data.hits.hits.length;
                 if(size >= 15){
                     context.phone_list = makeStringFromArray(data.hits.hits);
                     cb(context);
                     break;
                 }else{
                     context.start_price += 1000;
                     context.end_price   += 1000;
                 }
             });
         }

但是在上面的代码中,break是无法访问的语句。我无法处理它。请帮帮我。

1 个答案:

答案 0 :(得分:3)

问题在于您尝试以同步方式使用异步代码。这根本不会做,因为可以在几秒钟之后调用回调。如果调用内部函数,那么中断将无效。 你真正在做什么是无限次地调用Search.findBestMobile。 Node.js只有一个用于运行代码的线程,而你正在阻止它。所以不会调用回调。

您需要做的是使用递归或其他异步方法来循环。 一种简单的方法是使用新的上下文再次调用外部函数。

function searchRange(context, cb) {
    Search.findBestMobile(context.end_price , context.start_price , function(data){
                 console.log("Best Mobile");
                 size = data.hits.hits.length;
                 if(size >= 15){
                     context.phone_list = makeStringFromArray(data.hits.hits);
                     cb(context);
                 }else{
                     context.start_price += 1000;
                     context.end_price   += 1000;
                     searchRange(context, cb);
                 }
             });
}