ค้นหาเว็บไซต์

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 แต่ผมเคยทำทั้งสองอย่างมาก่อนและสุดท้ายแล้วมันขึ้นอยู่กับกรณีการใช้งานของคุณ ทำในสิ่งที่เหมาะสมกับสถานการณ์ของคุณ

บทความที่เกี่ยวข้อง