我正在检查if(response[0].title !== undefined),但是我得到了错误:
未捕获的TypeError:无法读取未定义的属性"title".
我的node.js脚本从数据库1中的表中读取行,进行一些处理并将行写入数据库2.
一切都完成后,脚本应该退出.
我怎么知道是否所有事情都已完成并退出节点呢?
如果我有这样的回调函数:
function exit_node() {
process.exit();
}
Run Code Online (Sandbox Code Playgroud)
(编辑:同时很明显,process.exit()也可以用db.close()替换 - 但这不是要放在那里的问题.问题是在哪个时候准确地做到这一点,即如何以及在何处执行此回调.)
但要在某个地方附上它并不容易.从db1最后一次读取后不正确,因为处理和写入仍然必须发生.
将它附加到对db2的写入并不容易,因为它必须在最后一次写入后附加,但每次写入都是独立的,并且不知道它是否是最后一次写入.
它理论上也可能发生,最后一次写入完成,但在此之前的另一次写入仍在执行.
编辑:对不起,我可以看到问题的解释不完整,可能令人困惑,但有些人仍然理解,下面有很好的答案.请继续阅读评论和答案,它应该给你全面的了解.
编辑:我可以想到一些"阻塞"控制器机制.脚本的不同部分为每个打开的"作业"向控制器添加阻止程序,并在作业完成后释放它们,并且当不再存在bocker时控制器退出脚本.也许async可以提供帮助:https://github.com/caolan/async
我也担心这会破坏代码和逻辑不合理.
我希望有一个"全局固定"(在pytest中它们也可以称为"会话范围固定装置"),它可以进行一些昂贵的环境设置,例如通常准备资源,然后在测试模块之间重复使用.设置是这样的,
会有一个夹具做一些昂贵的东西,比如启动Docker容器,MySQL服务器等.
@pytest.yield_fixture(scope="session")
def test_server():
start_docker_container(port=TEST_PORT)
yield TEST_PORT
stop_docker_container()
Run Code Online (Sandbox Code Playgroud)
会使用服务器,
def test_foo(test_server): ...
Run Code Online (Sandbox Code Playgroud)
会使用相同的服务器
def test_foo(test_server): ...
Run Code Online (Sandbox Code Playgroud)
似乎pytest支持这个过程scope="session",但我无法弄清楚如何使实际的导入工作.当前设置将给出错误消息,如,
fixture 'test_server' not found
available fixtures: pytestconfig, ...
use 'py.test --fixtures [testpath] ' for help on them
Run Code Online (Sandbox Code Playgroud) 我开始使用emacs和slime来开发一些小服务.
我找到了一种在更改后重新加载代码的方法,但我希望这更方便,更快捷.
这就是我现在的做法:
1)启动emacs,启动粘液,然后在粘液中:
2)(加载"init.lisp"); 加载一些不会改变的初始化代码
3)(加载"myseervice.lisp"); 这包含了我正在处理的代码
4)(myservice:start)
5)此时看门人正在运行,我可以测试它.然后我对myseervice.lisp进行了修改,以修改它.要将代码交换到新版本,我执行此操作:
6)(myservice:停止)
7)(加载"myservice.lisp")
8)转到4)重新开始...
这项工作到目前为止.但手动停止,重新加载和启动并不好玩.并且在调用之间的粘液中有很多输出,因此重用以前键入的命令并不容易4)-7).
为了得到一个解决方案,我启动了一个devhelper包,它应该只在一个命令中为我做这个,但它不起作用:
(defpackage :devhelper
(:use :common-lisp :myservice)
(:export :start :reload))
(in-package :devhelper)
(defun start ()
(myservice:start))
(defun reload ()
(myservice:stop)
(load "myservice.lisp") ;I think it is not possible to load it here,
;because this module is using the file that it is just loading
;But it does not have to work this way,
;I just like any good solution
(myservice:start))
Run Code Online (Sandbox Code Playgroud)
我想我现在可以这样做:
1)启动emacs,启动粘液,然后在粘液中:
2)(加载"init.lisp"); 加载一些不会改变的初始化代码
3a)(加载"myseervice.lisp"); 这包含了我正在处理的代码
3b)(加载"devhelper.lisp") …
asynchronous ×1
common-lisp ×1
control-flow ×1
emacs ×1
javascript ×1
lisp ×1
node.js ×1
pytest ×1
python ×1
sbcl ×1
slime ×1
undefined ×1