Правильный ответ: "это зависит".
Обратный вызов done
должен быть вызван внутри функции задачи, когда задача завершена, чтобы сообщить очередь о ее завершении.
Операция async task.client.send
, поэтому она будет завершена в ближайшем будущем. По этой причине в качестве второго аргумента есть обратный вызов, который может быть использован вызывающим абонентом, чтобы узнать, когда операция отправки будет завершена.
Если для вас, задача выполнена, когда запрос посыла закончился, вы должны пройти done
обратный вызов task.client.send
как в:
process: (task, done) ->
task.client.send(task.model, done)
Если для вас, задача завершается, когда посыла работа начинается, вы должны назвать его после task.client.send
как в:
process: (task, done) ->
task.client.send(task.model)
done()
в этом случае задача может считаться завершенным до операции отправки завершена.
Недостаток я вижу во втором случае (один с done
вызова после send
вызова) является то, что вы не имеете контроль над параллелизм из send
вызовов. Уровень параллелизма по умолчанию для метода Async.js queue
равен 1
, поэтому во втором случае выполняется вызов send
до того, как предыдущий закончен. По этой причине все запросы send
могут быть запущены одновременно, и вы не можете их ограничить.
В первом случае (done
в качестве второго аргумента send
) у вас есть лучший контроль над send
запроса и может контролировать уровень параллелизма, используя queue
второй аргумент (concurrency
).
Спасибо за объяснение, но это не говорит мне ничего, чего я еще не знаю. Я знаю, как работают обратные вызовы, тогда мой вопрос в этом контексте был бы тогда, когда я должен был рассмотреть задачу? Могу ли я просто асинхронно отправлять много, или было бы лучше отправить их по одному, т. Е. дожидаться обратного вызова перед отправкой следующего? – rtheunissen
@ параноидальный андроид, вам действительно нужно предоставить дополнительную информацию, прежде чем кто-нибудь сможет ответить на этот вопрос. – robertklep
Просто отредактировал ответ, пытаясь лучше ответить на ваши сомнения ... Дайте мне знать, что вы думаете ... – Andrea