暂停nodejs函数以获取其他函数的响应
Pausing the nodejs function for a response from other function
我正在使用亚马逊提供的Node.JS库来管理EC2和Autoclaing组。我写了一个程序来删除一个实例,这样自动缩放组就会创建一个新的实例。但在删除任何其他实例之前,我需要确保新实例由amazon生成并正在运行。为此,我需要暂停我的程序并不断检查,直到我得到积极的回应。这就是它的工作原理——
(我通常有3-4个实例,必须用3-4个新类型的实例替换。)
所以我的程序是——
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循环执行,程序结束,它不进入那个检查循环。你能给我一些想法吗。
感谢
链接--http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/frames.html
您在这里描述的问题是一个"轮询",虽然在节点的异步编程模型中谈论"暂停"通常是一种反模式,但轮询可能是它具有有效应用程序的一种情况。
但是,出于代码可维护性的原因——在这种情况下,可以稍后添加其他任务(例如其他检查),您还应该异步处理轮询。
这里有一些不同的方法可以解决你的问题。
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/]。你可能也有一些运气。
快乐节点黑客攻击:)
nodejs实际上并没有暂停。您可能正在寻找类似eventEmitter的东西,因此可以在发出事件时调用函数。http://nodejs.org/api/events.html
您不应该在节点中暂停。看看async(https://github.com/caolan/async)。您需要的可能是async.forEachSeries(),它允许您以串行但异步的方式进行操作。
在你的情况下,它会启动一台服务器,当它启动时,会调用一个回调,使该系列在下一台服务器等上继续。
以下是节点级别上的一些示例代码https://github.com/rvagg/node-levelup/blob/master/test/benchmarks/index.js#L60-L84
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- 仅在响应视图中激发jQuery函数
- 使用来自不同异步函数的响应创建一个json对象
- 如何执行ajax响应返回的javascript函数
- php函数的XMLHttpRequest响应不包含任何数据
- 如何等待javascript函数响应
- 等待anchor标记onclick函数响应为true
- AJAX 成功:函数(响应)返回空值
- 使用 Swift 在 iOS 中获取 Javascript 函数响应
- JavaScript 函数响应为空
- JavaScript 函数响应和链式承诺
- Javascript for loop不等待函数响应
- 将传递函数响应到子项不起作用
- 为什么函数响应.protype而常规对象不响应
- 修改 jquery $.get 函数响应
- 正在请求另一个函数中的函数响应
- 什么是“;函数(响应){}”;
- 对Ko视图模型的函数响应召回
- 如何从异步函数响应中创建一个Node.js模块
- Jquery中的Javascript函数响应不起作用