1

私は現在、promiseにQ.jsを使用しています。これは、Q.jsが進行状況ハンドラーを実装しているためです。しかし、彼らが発砲しているようには見えません。私は何が間違っているのですか?かなり基本的なようですので、何かが足りないに違いありません。(以下の例はcoffeescriptで書かれています)

Q = require('q')
squares = (list) ->
  deferred = Q.defer()
  result = list.map (e) ->
    r = e * e
    deferred.notify(r)
    return r
  deferred.resolve(result)
  return deferred.promise

squares([1,2,3,4,5,6,7,8,9,10])
  .then((result) ->
    console.log result
  ).progress((e) ->
    console.log e
  )
4

2 に答える 2

1

squares同期的に実行されるためdeferred.notifydeferred.resolveリスナーがバインドされる前に呼び出されます。すでに満たされた約束はまだコールバックを呼び出しますが、fulfilledコールバックは呼び出しませんprogresssetTimeoutコードの一部を次のようにラップできます。

Q = require('q')

squares = (list) ->
  deferred = Q.defer()
  setTimeout (->
    result = list.map (e) ->
      r = e * e
      deferred.notify(r)
      return r
    deferred.resolve(result)
    ), 0
  return deferred.promise

squares([1,2,3,4,5,6,7,8,9,10])
  .progress((e) ->
    console.log e
  ).then((result) ->
    console.log result
  )
于 2013-01-30T17:26:25.460 に答える