Memperbarui:
Untuk membantu pemirsa postingan ini di masa mendatang, saya membuat demo jawaban pluma ini .
Pertanyaan:
Tujuan saya tampaknya cukup mudah.
step(1)
.then(function() {
return step(2);
}, function() {
stepError(1);
return $q.reject();
})
.then(function() {
}, function() {
stepError(2);
});
function step(n) {
var deferred = $q.defer();
//fail on step 1
(n === 1) ? deferred.reject() : deferred.resolve();
return deferred.promise;
}
function stepError(n) {
console.log(n);
}
Masalahnya di sini adalah jika saya gagal pada langkah 1, stepError(1)
DAN keduanya stepError(2)
dipecat. Jika saya tidak return $q.reject
maka stepError(2)
tidak akan dipecat, tetapi step(2)
akan, yang saya mengerti. Saya telah mencapai segalanya kecuali apa yang saya coba lakukan.
Bagaimana cara menulis promise sehingga saya bisa memanggil fungsi saat ditolak, tanpa memanggil semua fungsi di rantai error? Atau apakah ada cara lain untuk melakukannya?
Ini demo langsung jadi Anda punya sesuatu untuk dikerjakan.
Memperbarui:
Saya sepertinya telah menyelesaikannya. Di sini, saya menangkap kesalahan di akhir rantai dan meneruskan data reject(data)
sehingga saya akan tahu masalah apa yang harus ditangani dalam fungsi kesalahan. Ini sebenarnya tidak memenuhi persyaratan saya karena saya tidak ingin bergantung pada data. Ini akan menjadi timpang, tetapi dalam kasus saya akan lebih bersih untuk melewatkan callback kesalahan ke fungsi daripada bergantung pada data yang dikembalikan untuk menentukan apa yang harus dilakukan.
step(1)
.then(function() {
return step(2);
})
.then(function() {
return step(3);
})
.then(false,
function(x) {
stepError(x);
}
);
function step(n) {
console.log('Step '+n);
var deferred = $q.defer();
(n === 1) ? deferred.reject(n) : deferred.resolve(n);
return deferred.promise;
}
function stepError(n) {
console.log('Error '+n);
}