【发布时间】:2014-01-25 21:04:44
【问题描述】:
我列出了一些代码:
function write_to_orchestrate(data_to_write) {
console.log('more testing');
db.put('musician', '1', '{"test":"test1"}')
.then(function (result) {
res.send(result);
})
.fail(function (err) {
res.send(err);
});
console.log('something');
}
看来,即使我在 db.put 函数调用的 .then 和 .fail 中的 res.send() 函数调用上有断点,它也不会停止其中任何一个。然而,console.log('more testing');和 console.log('something');正确到达。
我正在使用 Webstorm,但即使我只是使用终端和文本编辑器定期执行此代码,似乎 db.put(...) 的代码只是以某种方式被跳过。有关其他故障排除/调试的任何想法?
我还注意到,此调用发出 put 的数据源也是活动的并接受命令。只是为了确保我发出了几个 curl 命令并确保数据正常输入和输出。
这是一个视频,解释了发生了什么: http://youtu.be/CKq69z4ml8o
更新 #1: 我还尝试按照将 '{"test":"test1"}' 设置为 {"test":"test1"} 的建议,这似乎是个好主意,但不行。
更新 #2: 根据@hafthor,我尝试了另一个建议并实现了这样的代码以消除可能的分号问题。
function write_to_orchestrate(data_to_write) {
console.log('more testing');
db.put('musician', '1', {"test":"test1"}).then(function (result){res.send(result);}).fail(function (err) {res.send(err);});
console.log('something');
}
它仍然没有,但我确实在 WebStorm 中运行代码和调试时发现代码到达了 db.put,但后来我尝试进入代码,它直接进入 .fail,然后跳过并在 console.log('something'); 结束行。
另外,还有一个视频可以让您尝试更多地尝试使其工作:http://www.youtube.com/watch?v=rItBhyfG5AY
【问题讨论】:
-
您将数据发送到远程数据库正确吗?该数据库是否正常工作? then/fail 函数仅在知道结果后才执行。也许远程机器需要很长时间才能响应。
-
添加了对问题的更新以阐明远程数据库的状态。好问题。
-
你的程序在puts发生之前就退出了吗?没有更多上下文很难判断,但如果此模块直接执行然后退出,则事件队列可能永远无法运行这些异步放置。
标签: javascript node.js