Pernyataan Masalah
Bagaimanakah kita boleh memastikan gelung berulang secara serentak, melaksanakan setiap lelaran promise dan operasi pembalakan berikutnya (logger.log(res)) dalam susunan yang betul?
Penyelesaian
Eschewing PromiseWhile
Walaupun fungsi promiseWhile boleh memudahkan gelung dengan janji, ia tidak menjamin susunan pelaksanaan untuk operasi berantai.
Menggunakan Reduce untuk Serialisasi
Untuk mengekalkan yang diingini pesanan, kita boleh memanfaatkan Array.prototype.reduce() untuk mencipta rantaian rata operasi .then(). Ini menghapuskan keperluan untuk rekursi.
<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>
Penggunaan Sampel
<code class="javascript">// Compose an array of email addresses var arrayOfEmailAddys = [...]; fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });</code>
Faedah
Pendekatan ini menghapuskan pembolehubah tambahan dan fungsi keadaan diperlukan dalam kaedah promiseWhile. Selain itu, ia memudahkan kod dan memastikan susunan pelaksanaan janji yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Memastikan Pelaksanaan Gelung Segerak dengan Operasi Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!