【发布时间】:2011-04-24 13:28:10
【问题描述】:
我对基于事件的编程非常陌生(使用 node.js)。我相信有些事情我只是不明白,因为有一个特殊的问题我一次又一次地遇到。
简而言之,当异步性似乎妨碍您时,该问题正在处理。在我的例子中,这最常体现在使用第三方库时,这些库在设计上是非阻塞的,并促进了基于回调的 API。
例如:现在我正在写一些大量使用mranney's node-redis library 的东西。我的程序正在抓取 RSS 提要并将结果放入 redis。我正在使用我认为是 redis 的常见策略:
- 抓取提要,将结果存储为 redis 哈希,其键类似于
feed:<feedId>:results:<timestamp>。 - 在
feed:<feedId>:latest下存储对最新结果的引用。
将return latest_reading 放在get_latest_results 函数的底部失败,因为latest_reading 直到函数准备退出之后 才被定义。在hgetall 调用中放置return latest_reading 失败,因为return 引用回调,并被get_latest_results 忽略。
这只是我似乎经常要写的那种情况的一个例子。也许我正试图将方钉敲入圆孔,因为我不知道更好。似乎应该有一种非骇客的方法来解决这类问题。
【问题讨论】:
标签: javascript asynchronous node.js redis