Javascript 暂停nodejs函数以获得其他函数的响应
我正在使用Amazon提供的Node.JS库来管理EC2和自动分类组。我已经编写了一个程序来删除一个实例,以便自动缩放组将创建一个新实例。但在删除任何其他实例之前,我需要确保新实例由amazon生成并正在运行。为此,我需要暂停我的节目,并不断检查,直到我得到积极的回应。这就是它的工作原理--- (我通常有3-4个实例,必须替换为新类型的3-4个实例。) 所以我的计划是-- 现在的问题是我需要按顺序进行。我怎样才能暂停节目? 因为在我的例子中,foreach循环执行,程序结束,它不进入检查循环。你能给我一些建议吗 谢谢Javascript 暂停nodejs函数以获得其他函数的响应,javascript,node.js,amazon-web-services,callback,while-loop,Javascript,Node.js,Amazon Web Services,Callback,While Loop,我正在使用Amazon提供的Node.JS库来管理EC2和自动分类组。我已经编写了一个程序来删除一个实例,以便自动缩放组将创建一个新实例。但在删除任何其他实例之前,我需要确保新实例由amazon生成并正在运行。为此,我需要暂停我的节目,并不断检查,直到我得到积极的回应。这就是它的工作原理--- (我通常有3-4个实例,必须替换为新类型的3-4个实例。) 所以我的计划是-- 现在的问题是我需要按顺序进行。我怎样才能暂停节目? 因为在我的例子中,foreach循环执行,程序结束,它不进入检查循环。你
链接--实际上,nodejs不是用来暂停的。您可能正在寻找类似eventEmitter的东西,因此可以在发出事件时调用函数 永远不要在节点中暂停。看看async()。您需要的可能是async.forEachSeries(),它允许您以串行方式但异步地执行操作 在您的情况下,它将启动一台服务器,当启动时,将调用一个回调,使该系列在下一台服务器上继续,等等
下面是一些来自node levelup的示例代码您在这里描述的问题是一个“轮询”,虽然“暂停”通常是node异步编程模型中的反模式,但轮询可能是它具有有效应用程序的一种情况 但是,出于代码可维护性的原因——在这种情况下,您可以稍后添加其他任务(如其他检查),您还应该异步处理轮询 这里有一些不同的方法可以解决你的问题 1。根本不处理node.js中的问题-从主机的crontab调用节点应用程序,并将程序设计为退出。虽然这不是一个很好的解决方案,但它确实是一个健壮的解决方案 2.使用npm安装节点计时器模块[https://github.com/markussieber/timer]. 使用timer,您可以将check()函数作为参数传递,这样它就可以周期性地调用它。这更容易理解,但可以扩展,因为您可以运行大量的检查,这对于可扩展的EC2部署来说可能是必要的
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 Autoscaling提供的功能相同[http://aws.amazon.com/autoscaling/]和亚马逊弹性豆茎[http://aws.amazon.com/elasticbeanstalk/]. 你可能也有一些运气
快乐节点黑客:)
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