Pertimbangkan senario di mana anda mempunyai tatasusunan nilai (cth., myArray) dan perlu melaksanakan janji- fungsi berasaskan (cth., myPromise) secara berurutan, menghantar setiap elemen tatasusunan sebagai parameter. Bagaimanakah anda boleh melaksanakan "gelung boleh jeda" yang memastikan janji diselesaikan dalam susunan yang betul?
Untuk mencapai pelaksanaan berurutan, anda boleh menggunakan gabungan rantaian janji dan pemprosesan berulang. Berikut ialah coretan kod yang menunjukkan cara ini boleh dilakukan:
myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() )
Pendekatan ini memanfaatkan kaedah pengurangan untuk mengulangi tatasusunan dan mencipta satu siri janji berantai. Setiap janji diselesaikan selepas janji sebelumnya diselesaikan, dengan berkesan menguatkuasakan urutan pelaksanaan yang diingini.
Jika anda mempunyai sokongan untuk fungsi tak segerak, penyelesaian yang lebih bersih tersedia menggunakan forEachSeries fungsi:
const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise)
Fungsi ini berulang pada tatasusunan dan berhenti seketika pada setiap elemen, menunggu janji diselesaikan sebelum meneruskan ke lelaran seterusnya.
Jika anda perlu mengumpul nilai pulangan janji ke dalam tatasusunan, anda boleh mengubah suai fungsi forEachSeries seperti berikut:
const mapSeries = async (iterable, fn) => { const results = [] for (const x of iterable) { results.push(await fn(x)) } return results }
Fungsi ini berulang ke atas tatasusunan, mengumpul hasil janji dalam keputusan tatasusunan, dan akhirnya mengembalikan hasil yang dikumpul.
Atas ialah kandungan terperinci Bagaimana Menjujukan Perlaksanaan Janji dengan Hantaran Parameter daripada Tatasusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!