javascript - TypeScript วิธีการส่งออก const ใน promise
สิ่งที่ฉันต้องการดำเนินการคือการดึงข้อมูลจากฐานข้อมูล ซึ่งเมธอด getter เป็นแบบ async จากนั้นส่งออกตัวแปร const ตามค่าที่ส่งกลับจาก promise
โค้ดเป็นแบบนี้:
import {Storage} from "@ionic/storage";
//...
storage.get("setup_done").then((val)=>{
export const FirstRunPage = val?'valueA':'valueB';
})
อย่างไรก็ตาม ฉันได้รับข้อความแสดงข้อผิดพลาดว่า:
Modifiers cannot appear here
คำตอบ #1
การส่งออกทั้งหมดต้องปรากฏที่ระดับบนสุด และจริง ๆ แล้วไม่มีวิธีใดที่จะทำการส่งออกแบบอะซิงโครนัสเหมือนที่คุณต้องการได้
จากที่ฉันเห็น คุณมีสองทางเลือก ทางเลือกแรก และอาจจะง่ายที่สุด คือเพียงแค่ส่งออกพรอมิสเอง:
import {Storage} from "@ionic/storage";
//...
export const FirstRunPagePromise = storage.get("setup_done").then((val)=>{
return val ? 'valueA' : 'valueB';
})
นั่นหมายความว่าผู้ใช้โมดูลจะต้องเข้าถึงค่าด้วย .then เช่นเดียวกับพรอมิสอื่น ๆ
ตัวเลือกที่สองของคุณคือการกำหนดค่าค่าให้กับตัวแปรเมื่อมันถูกแก้ไข และส่งออกฟังก์ชัน getter สำหรับตัวแปรนั้น:
import {Storage} from "@ionic/storage";
//...
let FirstRunPage: string;
storage.get("setup_done").then((val)=>{
FirstRunPage = val ? 'valueA' : 'valueB';
});
export function getFirstRunPage() {
return FirstRunPage;
}
คุณต้องใช้ getter เพราะการนำเข้าตัวแปรโดยตรงจะให้สำเนาของมัน ซึ่งจะไม่อัปเดตเมื่อ promise ถูกแก้ไข.
วิธีการนี้หมายความว่าคุณสามารถเข้าถึงค่าดังกล่าวได้แบบซิงโครนัส, แต่ หากคุณเข้าถึงมันเร็วเกินไป มันจะเป็น undefined ดังนั้นโค้ดทั้งหมดของคุณจะต้องตรวจสอบก่อนว่าค่าดังกล่าวมีอยู่หรือไม่ แล้วจึงใช้งานค่าเหล่านั้น หรือคุณต้องทราบในฐานะนักพัฒนาเองว่าโค้ดใดก็ตามที่เข้าถึงค่าดังกล่าวจะทำงานก็ต่อเมื่อ promise ถูกแก้ไขแล้วเท่านั้น
ส่วนตัวผมแนะนำตัวเลือกที่ 1 แต่ผมเคยทำทั้งสองอย่างมาก่อนและสุดท้ายแล้วมันขึ้นอยู่กับกรณีการใช้งานของคุณ ทำในสิ่งที่เหมาะสมกับสถานการณ์ของคุณ
