Nodejs使用callback函数循环

我是新的nodejscallback函数。 我必须在给出的两个价格范围之间find电话列表,如果在获得的列表中没有15个电话,我必须改变价格范围直到我有15个电话。 其实我从另一个文件编写了从数据库search手机的function,从那个文件我发送callback函数调用。 callback之后,如果数组大小小于15,则必须检查数组大小,然后更改价格范围,并调用相同的函数,如recursion或循环。 我无法处理callback函数。 请帮我写出正确的代码。

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

问题是你正试图以同步的方式使用asynchronous代码。 那根本不会这样做,因为callback可以在几秒后被调用。 如果调用内部函数,旁边的中断将不起作用。 你真正在做什么是无限次地调用Search.findBestMobile。 Node.js只有一个线程用来运行你的代码,并且你正在阻塞它。 所以callback不会被调用。

你需要做的是使用recursion或其他asynchronous方法循环。 一个简单的方法就是用新的上下文再次调用你的外部函数。

 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); } }); }