Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

จะส่งคืนการตอบกลับจากการโทรแบบอะซิงโครนัสใน Javascript ได้อย่างไร


มีหลายวิธีในการส่งคืนการตอบกลับจากการโทรแบบอะซิงโครนัสในจาวาสคริปต์ ให้เราเข้าใจปัญหาก่อน สมมติว่าคุณมีฟังก์ชันที่เรียกว่า foo ซึ่งเป็นแบบอะซิงโครนัสและจะให้ข้อมูลหลังจากนั้นสักครู่ สามารถทำได้ 2 วิธี สามารถรับการเรียกกลับที่จะเรียกเมื่อพร้อมที่จะดำเนินการกับข้อมูล หรือจะคืนคำสัญญาก็ได้

ตัวอย่างเช่น ฟังก์ชัน setTimeout ยอมรับการเรียกกลับและดำเนินการตามระยะเวลาที่กำหนด สมมติว่าคุณใช้วิธีแรก จากนั้นคุณสามารถส่งฟังก์ชันใน setTimeout ได้

ตัวอย่าง

function myFunc(cb) {
   setTimeout(() => cb(100), 1000);
}
myFunc((a) => console.log(a))

ผลลัพธ์

100

สิ่งนี้จะเรียกใช้ฟังก์ชัน setTimeout พร้อมการเรียกกลับซึ่งจะดำเนินการหลังจาก 1,000 มิลลิวินาที เมื่อดำเนินการฟังก์ชันนั้น มันจะเรียกการเรียกกลับ (cb) ที่ส่งผ่านด้วยค่าที่ส่งคืนจากการเรียกกลับของ setTimeout

ใช้คำสัญญา

คุณสามารถทำได้โดยใช้คำสัญญา ห่อฟังก์ชัน async ของคุณด้วยสัญญา และแก้ไขสัญญานี้ด้วยค่าส่งคืนของฟังก์ชัน คุณสามารถโยงเมธอด then และส่งการเรียกกลับเพื่อใช้ค่าที่ส่งคืนจากฟังก์ชัน async

,

ตัวอย่าง

new Promise(resolve => setTimeout(() => resolve(100), 1000))
   .then(console.log)

ผลลัพธ์

100