Bagaimanakah anda boleh menyegerakkan urutan Janji dalam JavaScript?

DDD
Lepaskan: 2024-11-08 12:54:01
asal
575 orang telah melayarinya

How can you synchronize a sequence of Promises in JavaScript?

Menyegerakkan Urutan Janji

Janji JavaScript menyediakan mekanisme yang berkuasa untuk mengendalikan operasi tak segerak. Walau bagaimanapun, terdapat situasi di mana kita perlu menyegerakkan pelaksanaan janji dalam susunan tertentu. Ini amat mencabar apabila kita ingin mengelakkan pelaksanaan awal atau gangguan daripada janji kemudian.

Lelaran Manual dengan Janji Rantaian

Satu pendekatan mudah untuk menyegerakkan janji adalah dengan mengulangi mereka secara manual, merantai menjanjikan satu demi satu:

function sequence(arr) {
  let index = 0;

  function next() {
    if (index < arr.length) {
      return arr[index++].then(next).catch(e => Promise.reject(e));
    }
  }

  return next();
}
Salin selepas log masuk

Fungsi ini berulang melalui pelbagai janji, menyelesaikan setiap satu mengikut turutan dan mengendalikan sebarang penolakan.

Menggunakan Bluebird Promise Library

Bluebird ialah perpustakaan janji popular yang menyediakan ciri tambahan untuk kawalan serentak, termasuk:

Promise.mapSeries(arr, function(item) {
  return processItem(item);
}).then(function(results) {
  // process final results here
}).catch(function(err) {
  // process array here
});
Salin selepas log masuk

Menggunakan ES7 Async/Await

ES7 memperkenalkan sintaks async/wait, yang memudahkan pengaturcaraan tak segerak dan menyediakan cara semula jadi untuk menyusun janji:

async function processArray(array, fn) {
  let results = [];
  for (let i = 0; i < array.length; i++) {
    let r = await fn(array[i]);
    results.push(r);
  }
  return results;    // will be resolved value of promise
}
Salin selepas log masuk

Mengelakkan Pelaksanaan Awal

Untuk mengelakkan pelaksanaan awal janji, anda boleh buat mereka dalam gelung dan bukannya mengisytiharkannya lebih awal. Ini memastikan bahawa hanya janji semasa dilaksanakan sebelum janji seterusnya dibuat.

function sequenceDynamic(nextPromise) {
  let index = 0;

  function next() {
    const promise = nextPromise(index);
    if (promise) {
      return promise.then(() => next(++index)).catch(e => Promise.reject(e));
    }
  }

  return next();
}
Salin selepas log masuk

Fungsi yang dikemas kini ini mengambil fungsi panggil balik yang mengembalikan janji seterusnya untuk dilaksanakan. Fungsi ini terus berulang selagi panggilan balik mengembalikan janji yang sah.

Kesimpulan

Menyegerakkan janji dalam susunan tertentu boleh dicapai melalui lelaran manual, pustaka Bluebird, tak segerak /menunggu sintaks, atau dengan mengelakkan pelaksanaan awal. Adalah penting untuk memilih pendekatan yang paling sesuai dengan aplikasi dan persekitaran pembangunan anda.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menyegerakkan urutan Janji dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan