Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 暂停nodejs函数以获得其他函数的响应_Javascript_Node.js_Amazon Web Services_Callback_While Loop - Fatal编程技术网

Javascript 暂停nodejs函数以获得其他函数的响应

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循环执行,程序结束,它不进入检查循环。你

我正在使用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