ฉันอ่านว่าฟังก์ชัน async ที่ทำเครื่องหมายโดยasync
คำหลักส่งคืนสัญญาโดยปริยาย:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
แต่นั่นไม่สอดคล้องกัน ... สมมติว่าdoSomethingAsync()
ส่งคืนคำสัญญาและคีย์เวิร์ด await จะคืนค่าจากสัญญาไม่ใช่คำสัญญาจากนั้นฟังก์ชัน getVal ของฉันควรส่งคืนค่านั้นไม่ใช่คำสัญญาโดยปริยาย
แล้วกรณีนี้คืออะไรกันแน่? ฟังก์ชันที่ทำเครื่องหมายโดยคำหลัก async ส่งคืนสัญญาโดยปริยายหรือเราควบคุมสิ่งที่ส่งคืนหรือไม่
บางทีถ้าเราไม่คืนของอย่างชัดเจนพวกเขาก็จะคืนสัญญาโดยปริยาย ... ?
เพื่อให้ชัดเจนยิ่งขึ้นมีความแตกต่างระหว่างด้านบนและ
function doSomethingAync(charlie) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(charlie || 'yikes');
}, 100);
})
}
async function getVal(){
var val = await doSomethingAync(); // val is not a promise
console.log(val); // logs 'yikes' or whatever
return val; // but this returns a promise
}
var ret = getVal();
console.log(ret); //logs a promise
ในบทสรุปของฉันพฤติกรรมนั้นไม่สอดคล้องกับงบตอบแทนแบบดั้งเดิม ดูเหมือนว่าเมื่อคุณส่งคืนค่าที่ไม่ใช่สัญญาอย่างชัดเจนจากasync
ฟังก์ชันฟังก์ชันนั้นจะบังคับให้รวมไว้ในสัญญา ฉันไม่มีปัญหาใหญ่กับมัน แต่มันต่อต้าน JS ปกติ
console.log
แสดง?