阻止NodeJS退出事件循环

时间:2016-11-30 11:54:59

标签: javascript node.js exit event-loop

嘿哈瓦谷歌搜索并尝试了一切 - 但似乎没有任何作用,所以现在我会问你们:

如何制作我的节点应用。从停止退出 - 当我喜欢它继续运行并等待来自Web Socket连接的响应? 正如你所看到的,我在“预防退出”中尝试了不同的东西。功能。我只想要这款应用。继续从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();
        }
    }
}

UPDATE1:

My Web Socket提供商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或什么错误?但是没有抛出异常??

请参阅此处的文档:

https://www.npmjs.com/package/coinbase-exchange#websocket-client

https://www.npmjs.com/package/gdax#websocket-client

此外,DOC状态(这没有任何意义 - 当它只是旧的API仍然有效时):

GDAX过渡 作为将Coinbase Exchange重新命名为GDAX的一部分,API端点已发生变化。旧的* .exchange.coinbase.com端点将继续工作至2016年8月24日。对于新端点,请参阅下面的文档。

1 个答案:

答案 0 :(得分:2)

使用setTimeout

你可以这样做 - 创建一个重新注册的超时:

var t;
function nt() {
  t = setTimeout(nt, 10000);
}
nt();

每次都可以通过拨打clearTimeout将其关闭。例如,要在2秒后退出程序,可以添加:

setTimeout(function () {
  clearTimeout(t);
}, 2000);

所以它甚至不必等待那些完整的10秒(或任何间隔)完成。

使用setInterval

您可以使用setInterval

使其更简单
var i = setInterval(()=>{}, 10000);

您可以使用clearInterval取消它:

setTimeout(function () {
  clearInterval(i);
}, 2000);

真正的问题

如果您的流程退出,那么很有可能它会这样做,因为它不再等待任何事情发生,这才是真正的问题。因此,保持Node退出可能无法解决您的问题 - 它只会等待没有任何事情发生