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

Bagaimanakah JavaScript mengendalikan permintaan selari? Analisis ringkas empat kaedah

青灯夜游
青灯夜游ke hadapan
2021-07-27 10:53:222487semak imbas

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
})

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
  }
}
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();

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
})
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!

Kenyataan:
Artikel ini dikembalikan pada:掘金--milugloomy. Jika ada pelanggaran, sila hubungi admin@php.cn Padam