簡體   English   中英

防止NodeJS退出事件循環

[英]Prevent NodeJS from exiting event-loop

嘿哈瓦用谷歌搜索並嘗試了所有方法-但似乎沒有任何效果,所以現在我要問你們:

我如何制作我的Node應用程序。 從停止退出-當我希望它繼續運行並等待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();
        }
    }
}

UPDATE1:

我的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中肯定是錯誤的還是什么? 但是沒有拋出異常嗎?

請在此處查看文檔:

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日。有關新端點,請參見下面的文檔。

使用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退出可能無法解決您的問題- 它只會等待什么都不會發生

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM