节点红色关闭事件不等待异步功能完成
Node red on-close event does not wait for async function to finish
根据文档
https://nodered.org/docs/creating-nodes/node-js
当 Node-red(或有问题的特定节点)关闭时,将调用 "close" 事件,如果使用参数注册了侦听器,则它应该在完全停止之前等待 done()。
this.on('close', function(done) {
doSomethingWithACallback(function() {
done();
});
});
虽然它对我不起作用。我的错误,我敢肯定,但我不知道在哪里。以下代码显示日志中的第一个 "Closing" 条目,但不显示第二个条目 "Waited enough. Actually finishing now.":
node.on("close", function(done) {
node.log('Closing.');
setTimeout(function(){
node.log('Waited enough.Actually finishing now.');
done();
},5000);
});
有人可以给我指点吗?
使用:
节点红色 0.17.5
node.js6.14.1
编辑:在下面添加了输出日志
pi@raspberrypi:~ $ node-red-start
Start Node-RED
Once Node-RED has started, point a browser at http://192.168.1.17:1880
On Pi Node-RED works better with the Firefox or Chrome browser
Use node-red-stop to stop Node-RED
Use node-red-start to start Node-RED again
Use node-red-log to view the recent log output
Use sudo systemctl enable nodered.service to autostart Node-RED at every boot
Use sudo systemctl disable nodered.service to disable autostart on boot
To find more nodes and example flows - go to http://flows.nodered.org
Starting as a systemd service.
Started Node-RED graphical event wiring tool..
16 Apr 10:11:27 - [info]
Welcome to Node-RED
===================
16 Apr 10:11:27 - [info] Node-RED version: v0.17.5
16 Apr 10:11:27 - [info] Node.js version: v6.14.1
16 Apr 10:11:27 - [info] Linux 4.14.30-v7+ arm LE
16 Apr 10:11:30 - [info] Loading palette nodes
16 Apr 10:11:47 - [info] Dashboard version 2.7.0 started at /ui
16 Apr 10:11:50 - [info] Settings file : /home/pi/.node-red/settings.js
16 Apr 10:11:50 - [info] User directory : /home/pi/.node-red
16 Apr 10:11:50 - [info] Flows file : /home/pi/.node-red/flows_raspberrypi.json
16 Apr 10:11:50 - [info] Server now running at http://127.0.0.1:1880/
16 Apr 10:11:51 - [info] Starting flows
16 Apr 10:11:51 - [info] Started flows
Stopping Node-RED graphical event wiring tool....
16 Apr 10:12:06 - [info] Stopping flows
16 Apr 10:12:06 - [info] [simple-queue:queue1] Closing.
Stopped Node-RED graphical event wiring tool..
您遇到了一个已在 Node-RED 0.18 中修复的错误。
在 Node-RED 0.18 之前,处理运行时关闭的代码在终止进程之前不会等待所有节点关闭处理程序完成。
根据文档 https://nodered.org/docs/creating-nodes/node-js 当 Node-red(或有问题的特定节点)关闭时,将调用 "close" 事件,如果使用参数注册了侦听器,则它应该在完全停止之前等待 done()。
this.on('close', function(done) {
doSomethingWithACallback(function() {
done();
});
});
虽然它对我不起作用。我的错误,我敢肯定,但我不知道在哪里。以下代码显示日志中的第一个 "Closing" 条目,但不显示第二个条目 "Waited enough. Actually finishing now.":
node.on("close", function(done) {
node.log('Closing.');
setTimeout(function(){
node.log('Waited enough.Actually finishing now.');
done();
},5000);
});
有人可以给我指点吗?
使用: 节点红色 0.17.5 node.js6.14.1
编辑:在下面添加了输出日志
pi@raspberrypi:~ $ node-red-start
Start Node-RED
Once Node-RED has started, point a browser at http://192.168.1.17:1880
On Pi Node-RED works better with the Firefox or Chrome browser
Use node-red-stop to stop Node-RED
Use node-red-start to start Node-RED again
Use node-red-log to view the recent log output
Use sudo systemctl enable nodered.service to autostart Node-RED at every boot
Use sudo systemctl disable nodered.service to disable autostart on boot
To find more nodes and example flows - go to http://flows.nodered.org
Starting as a systemd service.
Started Node-RED graphical event wiring tool..
16 Apr 10:11:27 - [info]
Welcome to Node-RED
===================
16 Apr 10:11:27 - [info] Node-RED version: v0.17.5
16 Apr 10:11:27 - [info] Node.js version: v6.14.1
16 Apr 10:11:27 - [info] Linux 4.14.30-v7+ arm LE
16 Apr 10:11:30 - [info] Loading palette nodes
16 Apr 10:11:47 - [info] Dashboard version 2.7.0 started at /ui
16 Apr 10:11:50 - [info] Settings file : /home/pi/.node-red/settings.js
16 Apr 10:11:50 - [info] User directory : /home/pi/.node-red
16 Apr 10:11:50 - [info] Flows file : /home/pi/.node-red/flows_raspberrypi.json
16 Apr 10:11:50 - [info] Server now running at http://127.0.0.1:1880/
16 Apr 10:11:51 - [info] Starting flows
16 Apr 10:11:51 - [info] Started flows
Stopping Node-RED graphical event wiring tool....
16 Apr 10:12:06 - [info] Stopping flows
16 Apr 10:12:06 - [info] [simple-queue:queue1] Closing.
Stopped Node-RED graphical event wiring tool..
您遇到了一个已在 Node-RED 0.18 中修复的错误。
在 Node-RED 0.18 之前,处理运行时关闭的代码在终止进程之前不会等待所有节点关闭处理程序完成。