2012-06-13 15 views
5

Programiści wydają się podzieleni, jak uzyskać asynchroniczne powiadomienie o błędzie.Jakie są zalety używania zastrzeżenia?

Niektórzy programiści wolą używać wywołania zwrotnego z dwoma argumentami: wartością i wartością logiczną, która określa, czy wartość nie jest błędna. Ma to tę korzyść, że wygląda jak try catch stwierdzeniem:

asyncFunct(function (value, noError) { 
    if (noError) { 
     // success, do something with value 
    } else { 
     // value is the error which is thrown 
    } 
}); 

Inni wolą ujemny (czyli logiczną powinien powiedzieć, czy wartość jest błędna). Ich rozumowanie jest to, że jeśli wiesz, że funkcja asynchroniczna nie wygeneruje błąd, to możesz bezpiecznie pominąć drugi parametr w następujący sposób:

asyncFunction(function (value, isErroneous) { 
    if (!isErrorneous) { 
     // success, do something with value 
    } else { 
     // value is the error which is thrown 
    } 
}); 

asyncFunction(function (value) { 
    // success, do something with value 
}); 

Następnie są ludzie, którzy proponują oddzielne wywołania zwrotne dla pomyślnej realizacji asynchronicznych funkcji i errbacks do błędnego wykonywania funkcji asynchronicznych. To pozwala programiście wybrać, czy chce obsłużyć wywołania zwrotne, errbacks, zarówno lub None:

asyncFunction(function (value) { 
    // success, do something with value 
}, function (error) { 
    // handle the error 
}); 

asyncFunction(function (value) { 
    // success, do something with value 
}); 

asyncFunction(null, function (error) { 
    // handle the error 
}); 

Nie pytam, dla których metoda wolisz. Po prostu pytam o zalety i wady każdej metody, aby wiedzieć, której z nich użyć, kiedy.

+1

Brak rzeczywistych zalet i wad. To tylko kwestia stylu, imho. – freakish

+3

Istnieje inny sposób, który jest o wiele mocniejszy IMO: [odroczone obiekty] (http://blogs.msdn.com/b/ie/archive/2011/09/11/asynchronous-programming-in-javascript-with- promises.aspx). –

+1

Wolę odroczone obiekty. Jednak niezależnie od wybranej metody, która jest używana w całej aplikacji, spójność jest często ważniejsza niż wybór podejścia _best_. – msanders

Odpowiedz

1

Projekt Decyzja:

To jest właśnie projekt decyzji, nic więcej. Jeśli jest to samodzielny parametr, możesz mieć funkcję samodzielną i tworzyć "piękniejszy" kod (dla kogoś - dla kogoś bardziej niechlujny - jest naprawdę subiektywny).

Błąd Złożoność:

W niektórych aplikacjach można mieć bardziej złożonych błędów (filesystem.fileRead może mieć FILE_DONT_EXISTS, FILE_LOCKED, NOT_PERMISSIONS ..) oraz w niektórych aplikacjach trzeba po prostu wyrzucić błąd (db.checkConnection lub db.openConnection).

Porządek i różnice:

Bardzo ładny próbki dla wielkiego API jest z Amazon, można to sprawdzić. http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

ODPOWIEDŹ: Na Asynch funkcji jak copyObject(params = {}, callback) masz funkcji zwrotnej, które zawsze 2 parametry: err (Error) i data (Object) w function(err, data) { ... }. Błąd jest zaprojektowany jak pierwszy parametr, ponieważ jeśli masz błąd, nie masz danych. Tak naprawdę chodzi o priorytet i kolejność.

// request 

getObject({ 
    param1 : something, 
    param2 : something, 
    param3 : something 
}, callback); 

// response 

function callback(error, response){ 
    if error throw err; 
    // now deal with responsei 
} 

Jak widać, trzeba zarówno mieszane dwa sposoby. Na żądanie przekazujemy obiekt i funkcję, aw odpowiedzi otrzymujemy błąd i obiekt (do tej funkcji żądania).

Powiązane problemy