LINUX.ORG.RU

Как в асинхронную фунцкию добавить свои коды возврата ошибок?

 , ,


0

1

Как в своей асинхронной функции правильно добавить возможность добавления информации об ошибке - почему операция выполнена не успешно? В C# я бы определил бы собственные классы исключений. А в callback я могу передать вторым параметром или done : true/false (операция выполнена/не выполнена) или null (объект не найден).

self.myAsyncFunctionWithCallback(param1, param2, cb) {
   if(typeof cb !== 'function'){ return new Error('this is an async function and expects a callback'); }

   if (err) { return cb(err); } // Возникло исключение, возвращаем ее, нет разультата

   return cb(null, true); // Нет исключения, операция прошла успешно

   return cb(null, false); // Нет исключения, операция прошла неуспешно, кода возврата нет

   return cb(null, 0); // Нет исключения, операция прошла успешно, код возврата 0

   return cb(null, 1); // Нет исключения, операция прошла неуспешно, код возврата 1

   return cb(null, obj); // Нет исключения, операция прошла успешно, вернули обьект

   return cb(null, null); // Нет исключения, операция прошла неуспешно, объект не возвращается, кода возврата нет
}

.

Если возникло исключение или операция выполнилось неуспешно, то вызываем callback с информацией об ошибке (исключение/код ошибки/whatever) в качестве первого аргумента. Только в случае успеха вызываем callback с null в качестве первого параметра, ну и передаём результат через другие параметры, если он есть.

http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-no...

theNamelessOne ★★★★★ ()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

В C# я бы определил бы собственные классы исключений.

Собственно, кто тебе мешает в Node.js определить собственный класс исключения и передавать его в качестве первого параметра колбэка?

theNamelessOne ★★★★★ ()
Ответ на: комментарий от theNamelessOne

то, каким образом я буду в коллбэке определять, какое именно это исключение.

я же там не могу написать:

catch(MyOwnException1 ex) {
}
catch(MyOwnException2 ex) {
}
...

EnterpriseMobility ()

хинт: цепочка исключений

паттерн похожий: цепочка обязанностей

анти-паттерн: должен быть

anonymous ()

Нет исключения, операция прошла неуспешно, объект не возвращается, кода возврата нет

Это как?

ya-betmen ★★★★★ ()
Ответ на: комментарий от EnterpriseMobility

тогда

операция прошла успешнообъект получен
операция прошла неуспешнообъект не получен

ya-betmen ★★★★★ ()
Ответ на: комментарий от EnterpriseMobility

Если это ошибка, тогда надо return cb(err, null); Если err пустой, то считается что все хорошо.

Vit ★★★★★ ()
Ответ на: комментарий от EnterpriseMobility

Это какбэ зависит от вашей логики. Любая ошибка, которая прилетает снизу, в какой-то момент, когда вы ее обработаете, ошибкой быть перестает. А дальше уже гонятся не ошибки, а статусы, как часть данных.

Vit ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.