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); } }); }
- Nodejs的callback机制 – 哪个线程处理callback?
- 有关承诺的细节; 例子
- JavaScript在async.map期间删除项目
- error handling与嵌套callbackasynchronous瀑布
- Kue作业完成后执行callback
- 通过node.js理解javascriptcallback的概念,特别是在循环中
- 如何将parameter passing给nodejs中的mysql查询callback
- 为什么在节点js的一个callback函数中为全局variables赋值以在控制台中返回undefined?
- 什么可以是一个更好的方式来处理从nodejs项目中的控制器发送响应?