Узел асинхронной библиотеки привязки этого - PullRequest
1 голос
/ 18 февраля 2012

Я использую асинхронную библиотеку (https://github.com/caolan/async) на узле, пытающемся выполнить несколько асинхронных запросов к базе данных с помощью mongoskin (https://github.com/guileen/node-mongoskin)

). Проблема в том, что при использовании функции карты, например, так

app.post '/events', (req, res) ->
  storage.events.getByUser req.session.authId, (events) ->
    async.map events, storage.codes.getCountByEvent, (err, results) ->
      res.send results

это привязка @ к глобальному пространству имен в функции getCountByEvent, кто-нибудь, имеющий опыт работы с асинхронной библиотекой, может дать мне руководство по наилучшему способу исправить это?

Вот пример storage.codes реализации

class Codes
    constructor: (db) ->
        db.bind 'codes',
            getCountByEvent: (event, callback) ->
                @.find(event: event._id).toArray (err, res) ->
                    callback res.length

        return db.codes

exports.Codes = Codes

, вызывающей getCountByEvent за пределами async.map, она будет работать нормально

Заранее спасибо

1 Ответ

2 голосов
/ 18 февраля 2012

Вы можете создать версию getCountByEvent, связанную с объектом storage.codes:

async.map events, storage.codes.getCountByEvent.bind(storage.codes), ...
...