我是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是无法访问的语句。我无法处理它。请帮帮我。
答案 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);
}
});
}