Rumah > hujung hadapan web > tutorial js > Bagaimanakah JavaScript mengendalikan permintaan selari? Analisis ringkas empat kaedah

Bagaimanakah JavaScript mengendalikan permintaan selari? Analisis ringkas empat kaedah

青灯夜游
Lepaskan: 2021-08-02 19:24:24
ke hadapan
2508 orang telah melayarinya

Dalam artikel ini, mari kita lihat cara JavaScript mengendalikan permintaan selari? Memperkenalkan empat cara JS mengendalikan permintaan selari, saya harap ia akan membantu semua orang!

Bagaimanakah JavaScript mengendalikan permintaan selari? Analisis ringkas empat kaedah

Keperluan

Dua permintaan tak segerak dihantar pada masa yang sama dan pemprosesan akan dilakukan apabila kedua-dua permintaan kembali

Pelaksanaan

Kaedah di sini hanya memberikan idea dan hanya mengendalikan permintaan yang berjaya

Kaedah 1

Gunakan Janji. semua

const startTime = new Date().getTime()
function request(time) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(time)
    }, time)
  })
}
let request1 = request(3000)
let request2 = request(2000)
Promise.all([request1, request2]).then(res => {
  console.log(res, new Date() - startTime)	// [ 3000, 2000 ] 3001
})
Salin selepas log masuk

Kaedah 2

Sesuaikan status, tentukan status pengembalian dalam panggilan balik dan tunggu sehingga kedua-dua permintaan mempunyai nilai pulangan . tempat Terdapat masalah,

iaitu, ia.next(2000) dilaksanakan terlebih dahulu
const startTime = new Date().getTime()
function request(time) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(time)
    }, time)
  })
}
let state = [undefined, undefined]
let request1 = request(3000)
let request2 = request(2000)
request1.then(res => {
  state[0] = res
  process()
})
request2.then(res => {
  state[1] = res
  process()
})
function process() {
  if (state[0] && state[1]) {
    console.log(state, new Date() - startTime) // [ 3000, 2000 ] 3001
  }
}
Salin selepas log masuk
Jika anda menggunakan fungsi co, masalah ini tidak akan wujud, kerana co hanya melaksanakannya.next() dalam janji. Fungsi .then, yang agak It.next() ialah panggilan berantai

penjana menggunakan fungsi co

Dengan fungsi co, tiada perlu menjananya dan melaksanakan kaedah seterusnya. Prinsip co sebenarnya mudah, iaitu, laksana secara rekursif seterusnya sehingga selesai adalah benar; Jika nilai yang dikembalikan oleh seterusnya ialah Promise, laksanakan seterusnya dalam fungsi kemudian Jika ia bukan Promise, laksanakan fungsi seterusnya secara langsung. Berikut ialah pelaksanaan tulisan tangan ringkas bagi fungsi co

const startTime = new Date().getTime()
function ajax(time, cb) {
  setTimeout(() => cb(time), time)
}
function request(time) {
  ajax(time, data => {
    it.next(data);
  })
}
function* main() {
  let request1 = request(3000);
  let request2 = request(2000);
  let res1 = yield request1
  let res2 = yield request2
  console.log(res1, res2, new Date() - startTime) // 2000 3000 3001
}
let it = main();
it.next();
Salin selepas log masuk

Kaedah 4因为request2耗时较短,会先返回,导致res1获得了request2的返回值

Dengan penjana, mudah untuk memikirkan async /await, selepas semua async/wait dilaksanakan oleh generator

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati:
const co = require('co')
const startTime = new Date().getTime()
function request (time) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(time)
    }, time)
  })
}
co(function* () {
  let request1 = request(3000);
  let request2 = request(2000);
  let res1 = yield request1
  let res2 = yield request2
  console.log(res1, res2, new Date() - startTime) // 3000 2000 3001
})
Salin selepas log masuk
Video Pengaturcaraan

! !

Atas ialah kandungan terperinci Bagaimanakah JavaScript mengendalikan permintaan selari? Analisis ringkas empat kaedah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:掘金--milugloomy
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