0

クエリ結果で配列属性を初期化しようとするこのクラスがあります。

class data
minute: []
hour:   []
constructor:    () ->
    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)
    findMin.execFind (errMin, resMin) ->
        for recMin in resMin
            @minute.push recMin
    findHour.execFind (errH, resH) ->
        for recH in resH
            @hour.push recH

だから私は呼び出しsmth = new data()console.log smth、空の属性と「プッシュ」メソッドを持たない未定義に関するエラーを取得します。エラーは理解できますが、配列が空である理由がわかりません。誤解しないでください-このエラーによりそれらが空になることはわかっていますが、いくつかの種類のバリアントを試しました。そして、私は acync とコールバックについて読みましたが、コールバックを使用して「警告」するのではなく、後で使用する方法についてはまだ手がかりがありません。あなたがそれについて、またはそれができるいくつかのリンクで私を助けることができれば、私はそれをとても感謝しています.

4

2 に答える 2

0

私はあなたがインスタンス変数になりたいminuteと思いますか?hourそれらはコンストラクターで初期化する必要があります。あなたが今それをしている方法、彼らは上にいるprototypeので、それは正しく動作しません。これを試して:

class data
  constructor:    () ->
    @minute = []
    @hour = []
    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)
    findMin.execFind (errMin, resMin) =>
        for recMin in resMin
            @minute.push recMin
    findHour.execFind (errH, resH) =>
        for recH in resH
            @hour.push recH
于 2012-09-18T20:47:03.250 に答える
0

2つの問題があります。観察しているエラーの原因は、2つのコールバック内の「@」がdataインスタンスにバインドされていないため、を使用する必要があること=>です。次に、@ AaronDufourが指摘しているようにhourminute配列はクラスレベルで宣言されているため、のすべてのインスタンス間で共有されますdata。これは、あなたが望むものではないので、コンストラクターに移動する必要があります。

class data
  constructor: () ->
    @minute = []
    @hour = []

    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)

    findMin.execFind (errMin, resMin) =>
      for recMin in resMin
        @minute.push recMin
    findHour.execFind (errH, resH) =>
      for recH in resH
        @hour.push recH
于 2012-09-18T21:45:18.473 に答える