首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何等待时间间隔?

如何等待时间间隔?
EN

Stack Overflow用户
提问于 2013-07-03 03:57:20
回答 1查看 688关注 0票数 0

我正在忙于一个与应用程序接口通信的node.js项目,这涉及到大量使用特定于该应用程序接口的节点库。我已经阅读了(我认为)关于暂停所涉及的各种问题的所有现有问题以及它们的各种解决方案,但仍然不确定如何将正确的解决方案应用于我的问题。

简而言之,我有一个从API库中多次调用的函数,需要确保它们都已完成,然后才能继续。到目前为止,我已经成功地使用了优秀的caolan/async库来处理我的同步/异步需求,但使用API库中的这个特定函数遇到了障碍。

这个函数非常复杂,因为它涉及https和SOAP调用/解析,所以我试图避免重写它来表现caolan/async的行为,事实上,在这个阶段我甚至不确定为什么它表现不好。

它是一个异步函数,我需要多次调用它,然后等待所有调用完成。我已经尝试了许多使用回调甚至promises (q库)的方法,但就是不能让它像预期的那样工作,就像我已经成功地使用其他异步API函数一样。

出于绝望,我希望有一个笨拙的解决方案,我可以在我的程序中的某一点上等待,比如说5秒,而所有现有的异步函数都完成了,但直到5秒过去才会取得进一步的进展。因此,如果可能的话,我想要一个5秒的非阻塞暂停。

我也许可以使用光纤来实现这一点,但我真的希望在我沿着这条路走下去之前能找到另一种解决方案。

EN

回答 1

Stack Overflow用户

发布于 2013-07-03 04:06:14

问题的一个简单解决方案是在每次调用函数时递增一个计数器。然后在回调的末尾让它发出一个事件。侦听该事件,并在每次触发该事件时递增一个单独计数器。当两个计数器相等时,您可以继续。

这看起来像这样

代码语言:javascript
运行
复制
var function_call_counter = 0;
var function_complete_counter = 0;
var self = this;

for(var i = 0; i < time_to_call; i++){

    function_call_counter++;

    api_call(function(){
        self.emit('api_called');        
    });
}

this.on('api_called', function(){
    function_complete_counter++;
});

var id = setInterval(function(){
    if(function_call_counter == function_complete_counter){
        move_on();
        clearInterval(id); // This stops the checking
    }
}, 5000 ); // every 5 sec check to see if you can move on

承诺应该是有效的,它们也可能需要一些技巧。您提到了Q,但您可能想要查看promises A+

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17434715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档