Merangkai Janji untuk Mengalih Keluar Struktur Bersarang
Apabila bekerja dengan operasi tak segerak, janji menyediakan cara yang mudah untuk mengendalikan panggilan balik dan mengekalkan kebolehbacaan kod. Walau bagaimanapun, janji bersarang dengan cepat boleh menjadikan kod rumit dan sukar untuk diikuti. Artikel ini membincangkan cara mengalih keluar janji bersarang dan merantainya untuk kejelasan yang lebih baik.
Pendekatan
Untuk mengalih keluar janji bersarang, kami mengembalikan janji baharu daripada setiap panggilan balik kemudian. Ini membolehkan kami merantai janji satu demi satu, menghapuskan keperluan untuk struktur bersarang. Berikut ialah versi diubah suai bagi kod yang disediakan:
exports.viewFile = function(req, res) { var fileId = req.params.id; boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken) .then(function(response) { return boxViewerRequest('documents', {url: response.request.href}, 'POST'); }) .then(function(response) { return boxViewerRequest('sessions', {document_id: response.body.id}, 'POST'); }) .then(function(response) { console.log(response); }); };
Dalam kod ini, setiap satu panggilan balik mengembalikan janji untuk permintaan seterusnya, memastikan pelaksanaan diteruskan secara berurutan.
Umum Corak
Corak untuk merantai janji adalah sebagai berikut:
somePromise.then(function(r1) { return nextPromise.then(function(r2) { return anyValue; }); }) // resolves with anyValue || \||/ \/ somePromise.then(function(r1) { return nextPromise; }).then(function(r2) { return anyValue; }) // resolves with anyValue as well
Apabila mengembalikan janji baharu, nilai yang terhasil daripada janji itu diserahkan kepada pengendali seterusnya dalam rantaian. Sebagai alternatif, jika janji yang dikembalikan oleh pengendali adalah yang terakhir dalam rantaian, nilai azam janji itu diserahkan kepada pengguna.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menolak Janji untuk Kod JavaScript Asynchronous yang Lebih Bersih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!