Cara Membuat Gelung Segerak dengan Rantai Janji
Masalah:
Membina gelung untuk memastikan pelaksanaan segerak panggilan janji dan penyata pengelogan seterusnya boleh mencabar. Ini benar terutamanya apabila menggunakan perpustakaan seperti Bluebird.
Penyelesaian 1 (Fungsi promiseWhile Ringkas):
<code class="javascript">var Promise = require('bluebird'); var promiseWhile = function(condition, action) { var resolver = Promise.defer(); var loop = function() { if (!condition()) return resolver.resolve(); return Promise.cast(action()) .then(loop) .catch(resolver.reject); }; loop(); return resolver.promise; };</code>
Versi ringkas fungsi promiseWhile ini memerlukan panggilan balik yang dihantar sebagai hujah kepada parameter keadaan dan tindakan.
Penyelesaian 2 (Menggunakan Pengurangan Tatasusunan):
Pendekatan alternatif ialah mengurangkan tatasusunan alamat e-mel dan membuat penyegerakan yang sepadan panggilan untuk setiap:
<code class="javascript">function fetchUserDetails(arr) { return arr.reduce(function(promise, email) { return promise.then(function() { return db.getUser(email).done(function(res) { logger.log(res); }); }); }, Promise.resolve()); }</code>
Pendekatan ini mewujudkan rantaian .then() rata dan mengekalkan susunan asal respons.
Penggunaan:
Memanggil fetchUserDetails mengambil pelbagai alamat e-mel:
<code class="javascript">fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });</code>
Pendekatan ini menghapuskan keperluan untuk kaunter luar atau fungsi keadaan. Had ditentukan oleh panjang tatasusunan e-mel.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk gaya soalan yang sesuai dengan artikel yang disediakan: * Cara Mencapai Pelaksanaan Segerak dengan Rantai Janji: Panduan untuk Teknik `promiseWhile` dan Pengurangan Susunan yang Dipermudahkan * S. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!