ฉันใช้คุณสมบัติECMAScript 6และ ECMAScript 7 อยู่แล้ว (ขอบคุณ Babel) ในแอปพลิเคชันของฉัน - ทั้งมือถือและเว็บ
ขั้นตอนแรกที่เห็นได้ชัดคือ ECMAScript 6 ระดับ ฉันได้เรียนรู้รูปแบบการไม่ซิงค์คำสัญญา (ซึ่งมีแนวโน้มจริงๆ) เครื่องกำเนิดไฟฟ้า (ไม่แน่ใจว่าทำไมจึงต้องใช้สัญลักษณ์ *) ฯลฯ จากสิ่งเหล่านี้สัญญาจึงเหมาะกับจุดประสงค์ของฉัน และฉันได้ใช้มันในแอปพลิเคชันของฉันค่อนข้างมาก
นี่คือตัวอย่าง / รหัสเทียมของวิธีที่ฉันใช้คำสัญญาพื้นฐาน -
var myPromise = new Promise(
function (resolve,reject) {
var x = MyDataStore(myObj);
resolve(x);
});
myPromise.then(
function (x) {
init(x);
});
เมื่อเวลาผ่านไปฉันได้พบกับคุณลักษณะของ ECMAScript 7 และหนึ่งในนั้นคือASYNC
และAWAIT
คำหลัก / ฟังก์ชัน สิ่งเหล่านี้ร่วมกันทำสิ่งมหัศจรรย์ที่ยิ่งใหญ่ async & await
ฉันได้เริ่มต้นที่จะมาแทนที่บางส่วนของสัญญาของฉันด้วย ดูเหมือนจะเพิ่มมูลค่าให้กับรูปแบบการเขียนโปรแกรม
อีกครั้งนี่คือรหัสเทียมของฟังก์ชัน async, await ของฉันว่าเป็นอย่างไร -
async function myAsyncFunction (myObj) {
var x = new MyDataStore(myObj);
return await x.init();
}
var returnVal = await myAsyncFunction(obj);
การรักษาข้อผิดพลาดทางไวยากรณ์ (ถ้ามี) ไว้ทั้งคู่ทำสิ่งเดียวกันกับที่ฉันรู้สึก ฉันเกือบจะสามารถแทนที่สัญญาส่วนใหญ่ด้วย async ได้แล้วรออยู่
ทำไม async จึงจำเป็นต้องรอเมื่อสัญญาจะทำงานที่คล้ายกัน?
async รอการแก้ปัญหาที่ใหญ่กว่าหรือไม่? หรือเป็นเพียงวิธีแก้ปัญหาที่แตกต่างกันในการเรียกกลับนรก?
ดังที่ฉันได้กล่าวไปก่อนหน้านี้ฉันสามารถใช้คำสัญญาและการเชื่อมต่อได้รอคอยที่จะแก้ไขปัญหาเดียวกัน มีอะไรเฉพาะที่ async รอการแก้ไข?
หมายเหตุเพิ่มเติม:
ฉันใช้ async รอและสัญญาในโครงการ React และโมดูล Node.js อย่างกว้างขวาง โดยเฉพาะอย่างยิ่งการตอบสนองเป็นนกรุ่นแรก ๆ และใช้คุณลักษณะ ECMAScript 6 และ ECMAScript 7 จำนวนมาก