Dalam dokumentasi Bluebird Promise, .then(berjaya, gagal) dilabelkan sebagai antipattern. Apakah sebab di sebalik ini?
Berbeza dengan rantaian .then(success).catch(fail) yang disyorkan, menggunakan .then(success, fail) menimbulkan isu aliran kawalan:
Menggunakan .then(berjaya, gagal):
try { results = some_call(); } catch (e) { logger.log(e); break then; } else logger.log(results);
Menggunakan .then(success).catch(fail):
try { var results = some_call(); logger.log(results); } catch (e) { logger.log(e); }
Anticorak tidak digalakkan kerana ia mengehadkan pengendalian ralat kepada satu pengendali tangkapan terakhir. Walau bagaimanapun, ia boleh berguna dalam senario di mana:
Untuk mengelakkan panggilan balik berulang, anda boleh menggunakan corak berikut:
some_promise_call() .catch(function(e) { return e; // it's OK, we'll just log it }) .done(function(res) { logger.log(res); });
Sebagai alternatif, anda boleh memanfaatkan kaedah .finally() untuk tujuan ini.
Atas ialah kandungan terperinci Mengapakah `.then(berjaya, gagal)` Dianggap sebagai Anti-corak dalam Pengendalian Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!