我是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] 删除。
我来说两句