ΠΠΎΡΠ΅ΠΌΡ catch Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠΈΠ±ΠΊΠΈ?
ΠΠΎΡ ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Angular $ http, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° ΡΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ. Π― Ρ
ΠΎΡΠ΅Π» Π±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Error
ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ»Π°Π³Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΠ°.
function createError(message, details) {
var err = new Error(message);
Object.keys(details, function (key) {
err[key] = details[key];
});
return err;
}
createError('timeout of ' + config.timeout + 'ms exceeded', {
code: 'ECONNABORTED',
config: config
});
Π― ΡΠ°ΠΊΠΆΠ΅ Ρ
ΠΎΡΠ΅Π» Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡ Promise
ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠΎΠ΄Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP. Π ΡΠ΅ΠΉΡΠ°Ρ Π²ΡΠ΅, ΡΡΠΎ Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° 200β300, ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ΅ΡΡΡ.
@mzabriskie
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π°Π³Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΠ²Π΅Ρ, ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΎΡ 2xx / 3xx.
request-promise
lib ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»Π°Π³ / ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ simple
. ΠΠΎΠ³Π΄Π° simple
ΡΠ°Π²Π½ΠΎ true
, Π·Π°ΠΏΡΠΎΡ-ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ°Ρ
, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ ΡΠ΅ΡΡΡ (2xx, 3xx). ΠΠΎΠ³Π΄Π° ΡΠ»Π°Π³ Π»ΠΎΠΆΠ½ΡΠΉ, ΠΎΠ½ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΎΡΠ²Π΅ΡΠ³Π°Π΅Ρ ΠΈ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π»ΠΎΠΆΠΈΡΡΡ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π― ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΈ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΠΎΠ±Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ true
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π»ΡΡΡΠ΅ IMO ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
https://github.com/request/request-promise#get -a-rejection-only-if-the-request-failed ΠΏΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ
ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΠΊΠ°ΠΊ Π΄ΡΠ±Π»ΠΈΠΊΠ°Ρ β 24
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΡ ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Angular $ http, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° ΡΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ. Π― Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
Error
ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ»Π°Π³Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΠ°.Π― ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡ
Promise
ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠΎΠ΄Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP. Π ΡΠ΅ΠΉΡΠ°Ρ Π²ΡΠ΅, ΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° 200β300, ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ΅ΡΡΡ.