Node.js用回调函数循环

塔伦·沃拉(Tarun Voora)

我是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是无法到达的语句。我处理不了 请帮我。

灵魂

问题是您试图以同步方式使用异步代码。那根本不会做,因为回调可以在几秒钟后调用。此外,如果在内部函数中调用,则中​​断将不起作用。您真正在做什么是无限次调用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);
                 }
             });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章