【问题标题】:How to wait for a function to execute completely inside while loop in nidejs如何在节点js的while循环中等待函数完全执行
【发布时间】:2019-10-02 09:47:21
【问题描述】:

我想在函数完全执行后进行下一次迭代。但是,循环在函数完全执行之前迭代。我用过异步/等待。但没有运气。

function getdata(a,b)
{
    var somevalue = '';
    request(req,function(){
        //somecode
        //assign value to 'somevalue'
    });
    return somevalue;
}

function abc()
{
    var value = '';
    while(value!=='x')
    {
        value = getdata(a,b);
    }
}


//I've tried this way

async function getdata(a,b)
{
    var somevalue = '';
    request(req,function(){
        //somecode
        //assign value to 'somevalue'
    });
    return somevalue;
}

async function abc()
{
    var value = '';
    while(value!=='x')
    {
        value = await getdata(a,b);
    }
}

【问题讨论】:

  • 您需要承诺request 调用和await Promise。否则return somevalue; 将在请求完成之前运行很长时间。另外,该代码会向服务器发送垃圾邮件请求;也许有比while循环更好的方法来实现它?
  • @ChrisG 我正在抓取 facebook 帖子,当所有帖子都被抓取时,facebook 将 callDirection 设置为“下一个”。我需要检查 callDirection。当 callDirection 为“下一个”时,我将停止该过程。我有另一个想法去做。我正在努力。但是如果我可以通过while循环解决它,我会去的
  • 这是一种没有 while 循环(也没有 await)jsfiddle.net/khrismuc/418atf9q 的方法
  • @ChrisG,如果您提供任何有用的代码 sn-p 或解决方案链接

标签: javascript node.js async-await


【解决方案1】:

使用仅在执行完成后才返回的回调函数

function getdata(a,b, callback)
{
    var somevalue = '';
    request(req,function(){
        //somecode
        //assign value to 'somevalue'
        callback(someValue);
    });

}
var value = '';
function abc()
{
    getdata(a,b , function(data) { 
        value = data:
        if (value != 'x)
            abc();
    });
}
abc();

【讨论】:

  • 这不会暂停 while 循环,这将尝试运行数十万个 HTTP 请求。
  • 为什么?当 value 为 'x' 时,下一次迭代将立即停止。从什么意义上说,数十万..请清除。
  • OP 希望只在当前请求完成之后运行下一个请求,这是有充分理由的。我假设 OP 正在发出一些 API 请求并等待特定的回复值。因为我们不知道那个回复什么时候会是'x'(或者如果有的话),那个while循环正在运行并且运行并且运行。它不等待回调。它会一直调用getdate()request(),直到浏览器无法打开另一个HTTP 连接。
  • 好的,我已经更新了答案,现在没有 while 循环,而是基于递归。
猜你喜欢
  • 2020-04-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2017-05-03
  • 2019-02-16
  • 1970-01-01
  • 2015-07-02
  • 2021-07-14
相关资源
最近更新 更多