javascript - 带有回调函数的Nodejs循环

标签 javascript node.js callback

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

最佳答案

问题是您正试图以同步方式使用异步代码。那根本行不通,因为可以在几秒钟后调用回调。除此之外,如果在函数内部调用, 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);
                 }
             });
}

关于javascript - 带有回调函数的Nodejs循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360591/

相关文章:

javascript - 如何通过单击复选框按钮来切换 ng 类?

javascript - 将客户端套接字连接到 cookie

javascript - 如何在具有异步查询功能且仅在回调函数中修改循环条件的Node JS中的while循环中使用条件?

javascript - Bootbox:关闭对话框/点击 'X'按钮后的回调函数

javascript - KeyboardAvoidingView "Padding"无法正常工作

javascript - 如何通过 phantomjs 设置 Vue 输入?

javascript - 当信用到期时防止 ISP 重定向重定向到我的应用程序页面

javascript - 从 Javascript 调用 swift 代码

javascript - 错误 TypeError : array. map 不是 Angular 管道中的函数

node.js - Apollo 查询缓存中的数据错误