javascript/coffeescript 使用函数哈希作为参数
Javascript/Coffeescript Using Hash of Functions As Argument
我有一些看起来像这样的咖啡脚本(提前为复杂性道歉):
doc = new ChargerServerDoc(Chargers.find({id:site.id}), site)
doc.set_defaults().merge().needs_update
update: (id, doc) ->
Chargers.update id, $set: doc, (error, result) ->
if error
run_stats.error_count += 1
"error"
else
run_stats.update_count += 1
"update"
return
insert: (doc) ->
Chargers.insert doc, (error, result) ->
if error
run_stats.error_count += 1
"error"
else
run_stats.insert_count += 1
"insert"
return
它应该创建某种文档,并将插入或更新作为回调实现对数据库的插入或更新。
needs_update: (callbacks = null) ->
console.log inspect arguments
if callbacks is null
return true unless @is_equal(@working_document, @retrieved_document)
return false
else
console.log """
callbacks not null:
insert: #{inspect callbacks['insert']}
update: #{inspect callbacks['update']}
"""
data = @get()
if @is_equal(@working_document, @retrieved_document)
throw 'requires update callback' if _.isEmpty(callbacks.update)
return callbacks.update.call(this, data._id, _.omit(data, '_id'))
else
throw 'require insert callback' if _.isEmpty(callbacks.insert)
return callbacks.insert.call(this, _.omit(data, '_id'))
如您所见,needs_update
函数充斥着console.log
语句。这是在node.js中运行的,这是一个在启动时运行一次的事情。因此,在节点检查器中观看并不容易。至少我还没有弄清楚怎么做。
无论如何,其中有趣的部分是 console.log inspect arguments
. inspect
只是将对象转换为 JSON 字符串,以便我可以读取它。结果总是{"0":{}}
.
这就是我被困住的地方。我可以看到它正在传递一个哈希,但哈希中没有任何内容。更奇怪的是,当我用纯Javascript手写它时,也会发生同样的行为。
我试图减少这一点并重现它无济于事。此代码有效:
h =
f1: (a) -> 'one'
f2: (b) -> 'two'
test = (fn) ->
console.log fn.f1.call()
console.log fn.f2.call()
test(h)
有没有人明白为什么第一个代码失败而简化的示例有效?
谢谢!
你没有正确使用_.isEmpty
。从精细手册:
是空
如果可枚举_.isEmpty(object)
对象不包含任何值(没有可枚举的自己的属性),则返回 true。对于字符串和类似数组的对象,
_.isEmpty
检查 length 属性是否为 0。
函数不是可枚举的对象,也不是字符串或类似数组的对象。你给了_.isEmpty
一些它不理解的东西,所以你调用了未指定的行为。事实证明,_.isEmpty
会为任何它不理解的东西返回true
。
如果你想看看某物是否是一个函数,_.isFunction
可能会更好地为你服务:
throw 'requires update callback' unless _.isFunction(callbacks.update)
相关文章:
- 如何同步Redux状态和url哈希标记参数
- 如何使用哈希提取URL参数
- jQuery将查询参数附加到当前哈希中,忽略重复项
- Jquery在尝试添加url参数时添加哈希符号
- 处理Ember.js默认路由之外的页面URL哈希参数
- URL 哈希参数的 JavaScript 字符串压缩
- javascript/coffeescript 使用函数哈希作为参数
- 哈希 URL 参数,MD5 哈希 (PHP)
- RegEx 用于从 JavaScript 中的 url 哈希中提取参数
- 用于对数据进行排序的多个 (2) 个哈希 URL 参数
- Rails 3 上传和回形针参数哈希不可用
- Javascript - 获取带有哈希的 url 参数
- 加载内容时取决于哈希 URL 参数
- 哈希键/值作为数组
- 车把.js:是否可以将多个哈希作为参数传递给车把助手
- 如何从控制器 ASP.NET url 中删除哈希参数,以便返回到 Angular.JS 应用程序中的根 URI
- 如何使用 JavaScript 哈希作为函数中的参数
- 如何从哈希 url 获取参数
- 为什么在参数传递过程中未评估javascript哈希对象
- 如何防止在$location哈希搜索参数更改上创建新的控制器实例