首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >暂停nodejs函数,等待其他函数的响应

暂停nodejs函数,等待其他函数的响应
EN

Stack Overflow用户
提问于 2013-07-23 07:50:53
回答 3查看 198关注 0票数 0

我正在使用亚马逊提供的Node.JS库来管理EC2和自动抓取组。我写了一个删除实例的程序,这样自动伸缩组就会创建一个新的实例。但在删除任何额外的实例之前,我需要确保新实例是由amazon生成的并且正在运行。为此,我需要暂停我的程序,并不断检查,直到我得到一个肯定的响应。所以它是这样工作的

(我通常有3-4个实例,必须替换为3-4个新类型的实例。)

所以我的程序是--

代码语言:javascript
运行
复制
 updateServer(){
      Which has the code to retrieve the instances from the server.
      foreach(instance in the list of instances){
           replace(); (with new one.)
      }
 }

replace() {
   delete the old one.
   while(new instance is not generated) {
      check();
   }
}

check(){
  return the status.
}

现在的问题是,我需要这一切按顺序发生。如何暂停程序?因为在我的例子中,foreach循环执行,程序结束,它不会进入那个check循环。你能给我点子吗?

谢谢

链接-- http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/frames.html

EN

回答 3

Stack Overflow用户

发布于 2013-07-23 19:23:02

你在这里描述的问题是一个' polling ',虽然‘暂停’在节点的异步编程模型中通常是一个反模式,但轮询可能是它具有有效应用程序的一种情况。

但是,出于代码可维护性的原因-在这种情况下,可以稍后添加其他任务(例如其他检查),您还应该异步处理轮询。

这里有一些不同的方法可以解决你的问题。

1。根本不要在node.js中处理这个问题-从主机的crontab调用节点应用程序,并设计程序退出。虽然这不是很像节点,但它确实是一个健壮的解决方案。

2.使用npm安装节点定时器模块https://github.com/markussieber/timer.使用定时器,您可以将check()函数作为参数传递,这样它就会定期回调它。这比较不可靠,但可以扩展,因为您可以运行许多检查,这对于可伸缩的EC2部署来说可能是需要的。

代码语言:javascript
运行
复制
timer = require('timer');   //import the time module    
function check(){           //check function now polls
    //add an if(something==true) statement here to allow you to exit if necessary
    console.log("Checking stuff");
    timer.timer(200, check); //calls this function repeatedly every 200ms
}

check(); //starts the code polling

亚马逊3.Amazon Elastic Beanstalk http://aws.amazon.com/elasticbeanstalk/.提供的功能听起来和 Autoscaling http://aws.amazon.com/autoscaling/提供的功能是一样的你可能也会有一些运气。

Happy node hacking :)

票数 1
EN

Stack Overflow用户

发布于 2013-07-23 08:45:47

nodejs不是用来暂停的,真的。您可能正在寻找类似于eventEmitter的东西,这样您就可以在发出事件时调用函数。http://nodejs.org/api/events.html

票数 0
EN

Stack Overflow用户

发布于 2013-07-23 10:52:44

您不应该在node中暂停。看一看异步(https://github.com/caolan/async)。您需要的可能是async.forEachSeries(),它允许您串行但异步地做事情。

在本例中,它将启动一台服务器,当服务器启动时,将调用一个回调,使该系列在下一台服务器上继续运行,等等。

以下是node-levelup https://github.com/rvagg/node-levelup/blob/master/test/benchmarks/index.js#L60-L84中的一些示例代码

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

https://stackoverflow.com/questions/17799335

复制
相关文章

相似问题

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