Rumah > Artikel > hujung hadapan web > Bagaimanakah JavaScript mengendalikan permintaan selari? Analisis ringkas empat kaedah
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!
Dua permintaan tak segerak dihantar pada masa yang sama dan pemprosesan akan dilakukan apabila kedua-dua permintaan kembali
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 dahuluconst 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!