【问题标题】:$q, deferred and partial application$q,延期和部分申请
【发布时间】:2014-10-12 18:42:31
【问题描述】:

所以我想知道为什么这不能按预期工作:

fn = ->
   dfrd = $q.defer()
   $timeout ->
      dfrd.resolve({foo:'bar'})
    ,1000
    return dfrd.promise


displayData = (data)-> 
   console.log(data.foo)

fn().then(displayData)                  # doesn't work like that

fn().then((data)-> displayData(data))   # works if used like this - prints "bar"

那么为什么then 没有得到正确的咖喱呢?

【问题讨论】:

  • “咖喱”是什么意思?从CS的角度来看没有区别。你能提供一个演示来说明什么不起作用吗?
  • 你知道吗?实际上它确实有效plnkr.co/edit/pX4KV1gfTH6v6jXcUCP3?p=preview,我的实际代码中可能有问题:(

标签: javascript angularjs coffeescript


【解决方案1】:

.then(cb) 是签名,而不是 .then(data)

你需要传递一个回调来获取数据作为参数:

.then(function(data){ //use data here });

【讨论】:

  • 这就是我要说的:你为什么不能使用它:.then(displayData) 其中displayData 是一个具有回调所需签名的函数?它应该是触发它并传递任何与承诺一起返回的参数,对吧?
  • 我真的不知道你在那里发布的胡言乱语。但是.then 需要一个函数。你正在传递一个对象。
  • 你在说什么? var fn = function(arg){ console.log(arg) }; foo.then(fn)你在哪里看到一个物体?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
相关资源
最近更新 更多