Javascript 防止NodeJS退出事件循环

Javascript 防止NodeJS退出事件循环,javascript,node.js,exit,event-loop,Javascript,Node.js,Exit,Event Loop,嘿,哈瓦用谷歌搜索并尝试了每一件事——但似乎没有任何效果,所以现在我要问你们: 如何制作我的节点应用程序。从停止退出-当我希望它继续运行并等待来自Web套接字连接的响应时? 正如你所看到的,我在“PreventExit”函数中尝试了不同的东西。我只是想要这个应用。保持从web套接字连接接收数据-无需关闭/退出 var Gdax = require('gdax'); var WSemitter = require('../eventemitters/websocket-emitter'); mo

嘿,哈瓦用谷歌搜索并尝试了每一件事——但似乎没有任何效果,所以现在我要问你们:

如何制作我的节点应用程序。从停止退出-当我希望它继续运行并等待来自Web套接字连接的响应时? 正如你所看到的,我在“PreventExit”函数中尝试了不同的东西。我只是想要这个应用。保持从web套接字连接接收数据-无需关闭/退出

var Gdax = require('gdax');
var WSemitter = require('../eventemitters/websocket-emitter');

module.exports = {
    initws: function () {
        var WebSocketEmit = new WSemitter();

        test();

        function test() {
            try {
                PreventExit();

                var websocket = new Gdax.WebsocketClient();
                websocket.on('message', function (data) {
                    console.log(data);
                    WebSocketEmit.fakeEvent();
                });
            }
            catch (err) {
                console.log(err);
            }
        }

        function PreventExit(){
            WebSocketEmit.on('fakeEvent', function () {
                console.log('Just fake - to keep node running!');
            });

            setTimeout(function(){}, 100000);
            process.stdin.resume();
        }
    }
}
更新1:

我的Web套接字提供商CoinBase最近更新了他们的API。从Coinbase exchange到Gdax。我只是想替换:

var Gdax = require('gdax');
var CoinbaseExchange = require('coinbase-exchange');

//var websocket = new Gdax.WebsocketClient();
var websocket = new CoinbaseExchange.WebsocketClient();
现在我的应用程序正在等待!但在只收到1个json对象之后,我的节点应用程序仍然存在!??我如何使它保持连接打开而不是关闭?而是一直从API接收数据

更新2

当我删除了所有的测试代码,并且只有与API相关的代码时,它就可以工作了——但只适用于旧的测试代码……coinbase exchange??所以这一定是新的(gdax)API中的错误还是什么?但是没有抛出异常

请参见此处的文档:

此外,DOC声明(这毫无意义-当只有旧API仍在工作时):

GDAX跃迁 作为Coinbase Exchange更名为GDAX的一部分,API端点发生了变化。旧的*.exchange.coinbase.com端点将继续工作到2016年8月24日。有关新端点,请参阅下面的文档。

使用setTimeout 您可以执行以下操作-创建一个重新注册自身的超时:

var t;
function nt() {
  t = setTimeout(nt, 10000);
}
nt();
每次您都可以通过调用
clearTimeout
来关闭它。例如,要使程序在2秒后退出,可以添加:

setTimeout(function () {
  clearTimeout(t);
}, 2000);
因此,它甚至不必等待整整10秒(或任何时间间隔)才能完成

使用setInterval 使用
setInterval
,您可以使它变得更简单:

var i = setInterval(()=>{}, 10000);
setTimeout(function () {
  clearInterval(i);
}, 2000);
您可以使用
clearInterval
取消它:

var i = setInterval(()=>{}, 10000);
setTimeout(function () {
  clearInterval(i);
}, 2000);
真正的问题 但是如果您的流程退出,那么它很有可能退出,因为它不再等待任何事情发生,这才是真正的问题。因此,阻止节点退出可能无法解决这种情况下的问题-它将使用setTimeout等待任何事情发生 您可以执行以下操作-创建一个重新注册自身的超时:

var t;
function nt() {
  t = setTimeout(nt, 10000);
}
nt();
每次您都可以通过调用
clearTimeout
来关闭它。例如,要使程序在2秒后退出,可以添加:

setTimeout(function () {
  clearTimeout(t);
}, 2000);
因此,它甚至不必等待整整10秒(或任何时间间隔)才能完成

使用setInterval 使用
setInterval
,您可以使它变得更简单:

var i = setInterval(()=>{}, 10000);
setTimeout(function () {
  clearInterval(i);
}, 2000);
您可以使用
clearInterval
取消它:

var i = setInterval(()=>{}, 10000);
setTimeout(function () {
  clearInterval(i);
}, 2000);
真正的问题
但是如果您的流程退出,那么它很有可能退出,因为它不再等待任何事情发生,这才是真正的问题。因此,阻止节点退出可能无法解决您的问题,在这种情况下-它只会等待任何事情发生

您是否在某处调用了initws?是的-从我的server.js文件调用了i initws()。。。我从CMD的“节点服务器”开始,除非我遗漏了什么,否则您不会在代码中的任何地方等待连接。如果您这样做了,节点将不会退出。websocket.on正在等待响应…您是否在某处调用了initws?是-从我的server.js文件调用了i initws()。。。我从CMD的“节点服务器”开始,除非我遗漏了什么,否则您不会在代码中的任何地方等待连接。如果您这样做了,节点将不会退出。websocket.on正在等待响应…我已经尝试使用setInterval函数。。。在我的退出函数中。。。但它根本不会改变任何事情。。。所有这一切似乎都是一样的-什么都没有…?
setInterval
解决方案非常有效,唯一的一点是我将代码封装到Node REPL中的
if(1){…}
,这里找到的另一个lifehack。我已经尝试使用setInterval函数。。。在我的退出函数中。。。但它根本不会改变任何事情。。。所有这一切似乎都是一样的-什么都没有…?
setInterval
解决方案非常有效,唯一的问题是我将代码封装到Node REPL中的
if(1){…}
,这是另一个在这里找到的lifehack。