នៅ​ក្នុង​ភាសា ES6 នៅ​ពេល​ខ្លះ​បញ្ជា​មួយ​ចំនួន​ត្រូវ​ការពេលវេលាក្នុង​ការស្រង់​យក​ទិន្នន័យ​ឬ​ធ្វើ​អ្វី​ផ្សេង​ៗ​ទៀត​ក្នុង​ការជ្រើសរើសដ៏​ចាំបាច់​។ ក្នុង​ករណី​នេះ បញ្ជា​បន្ទាប់​ពី​នោះ​នឹង​មិន​រង់​ចាំ​អោយ​បញ្ជា​ដែល​ត្រូវ​ការពេលវេលា​ទាំងនោះ​ធ្វើការ​អោយ​បាន​ចប់​សព្វគ្រប់ ទើប​អាច​ចាប់​ផ្តើមការងារ​របស់​វា​ឡើយ​ វា​នឹង​ចាប់​ផ្តើម​បំពេញ​ការងារ​របស់​វា​ភ្លាម​ៗ​បន្ទាប់​ពី​បញ្ជា​មុន​វា​ត្រូវ​បាន​ចាប់​ផ្តើម។ ដំណើរការ​របៀប​នេះ​ត្រូវ​ហៅ​ថា​ដំណើរការ asynchronous ។ 

 

ជួនកាល ដំណើរការ ​asynchronous បង្ករ​អោយ​មាន​ការរាំងស្ទះ​ដល់​បញ្ជាជា​បន្តបន្ទាប់​ទាំងឡាយ​ដែល​ត្រូវ​ការ​ទិន្នន័យ​ពី​បញ្ជា​មុន​ៗ​យក​ទៅ​ប្រើការ​ ពីព្រោះ​បញ្ជា​បន្តបន្ទាប់​ទាំងឡាយ​នឹង​មិន​រង់ចាំ​បញ្ជា​មុន​វា​ ធ្វើការងារ​អោយ​បាន​ចប់​សព្វគ្រប់​ឡើយ​។ ដើម្បី​​ដោះស្រាយ​បញ្ហា​នេះ កញ្ចប់ SvelteKit បាន​ផ្តល់​លទ្ធភាព​អោយ​យើង​ប្រើប្រាស់​ផ្នែក​នៃ​បញ្ជា await ក្នុង​ការរង់ចាំ​អោយ​បញ្ជា​មុន​ៗ​ទាំងឡាយ​អាច​បញ្ចប់​ការងារ​របស់​វា​សិន ទើប​ផ្នែក​នៃ​បញ្ជា await ចាប់​ផ្តើម​ធ្វើការ​តាម​ក្រោយ​។

 

 // src/routes/utils.js

function randomNumber() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
        resolve(Math.random() * 100)
        }, 1000)
    })
 }

export async function getRandomNumber() {
    const result = await randomNumber()
    return result
}

 

<script>
    import { getRandomNumber } from './utils.js';

    let promise = getRandomNumber();

    function handleClick() {
	    promise = getRandomNumber();
    }
</script>

<button on:click={handleClick}>
    generate random number
</button>

{#await promise}
    <p>...waiting</p>
{:then number}
    <p>The number is {number}</p>
{:catch error}
    <p style="color: red">{error.message}</p>
{/await}