Подтвердить что ты не робот

Что произойдет, если я отклоню/разрешу несколько раз в Kriskowal q?

Я изучаю шаблон promises и используя kriskowal q для node.js,

имеющий этот фрагмент:

var deferred = Q.defer();
try {
    messageData = JSON.parse(message);
} catch (e) {
    global.logger.warn('Error parsing JSON message.');
    deferred.reject(e);
}
...
if (some_reason)
    deferred.resolve(something);
...
return deferred.promise;

Что делать, если сбой анализатора и some_reason истинно?

Будет ли процесс исполнения отклоняться посредством разрешения и обе метода обетования вызываться в разное время, создавая таким образом ошибку?

Должен ли я избегать многократного вызова reject/resolve?

4b9b3361

Ответ 1

Так как promises может разрешаться только раз (для выполнения или отклонения), первая победа в разрешении и любые дальнейшие вызовы будут проигнорированы. Из документов:

Во всех случаях, когда обещание разрешено (т.е. выполнено или отклонено), разрешение является постоянным и не может быть reset. Попытка вызвать решение, отклонить или уведомить, если обещание уже разрешено, будет no-op.

Должен ли я избегать многократного вызова reject/resolve?

Вы даже можете создать свое приложение, позволяющее двум методам "расы" друг против друга разрешать отложенные, но в целом его следует избегать, чтобы уменьшить путаницу читателя.