មុន​នឹង​ចូល​ដល់​ការសិក្សា​ពី​ ការសន្យា (promise) នៅ​ក្នុង​ភាសា ES6 យើង​ចាំបាច់​ត្រូវ​យល់​ពី​យន្តការ​នៃ​ការអនុវត្ត​​បញ្ជាទាំងឡាយ​នៅ​ក្នុង​ភាសា ES6 ជាមុន​សិន​។ 

 

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

 

function action(){
    console.log(`The execution of statement`)
}

setTimeout(action, 5000)
console.log(`The end of the program`)

 

នៅ​ក្នុង​កម្មវិធី​ខាង​លើ​នេះ យើង​សង្កេត​ឃើញ​ថា នៅ​ពេល​ដែល​បញ្ជា​ដែល​ជា​ការយក​្បួន​មាន​ស្រាប់ seTimeout() មក​ប្រើ​ ត្រូវ​យក​ទៅ​អនុវត្ត បញ្ជា​បន្ទាប់​ពី​នោះ​ក៏​ត្រូវ​យក​ទៅ​អនុវត្តភ្លាម​ដែរ ដោយ​មិន​រង់​ចាំ​ការអនុវត្ត​បញ្ជា​ seTimeout()​ ​ត្រូវ​បាន​បញ្ចប់​​សព្វគ្រប់​​យ៉ាងណា​ក៏​ដោយ​។ ជាលទ្ធផល​ បញ្ជា​ទី ២ ផ្តល់​លទ្ធផល​មុន​បញ្ជា​ទី ១ ។

 

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

 

let result = 'Initial value'

setTimeout(function(){
        result = `The execution of statement`
}, 5000)
    
console.log(result)

 

ដើម្បី​ដោះស្រាយ​បញ្ហា​ខាង​លើ​នេះ ​នៅ​ក្នុង​ភាសា ES6 យើង​អាច​​សរសេរ​កូដធ្វើ ការ​​សន្យា (promise) ​ប្រាប់អោយ​​បញ្ជា​ទី​ពីរ​រង់​ចាំ​ទទួល​យក​លទ្ធផល​ពី​បញ្ជា​ទី​មួយ​បាន ដោយ​ប្រើប្រាស់​ថ្នាក់​ឈ្មោះ Promise ដូច​ខាង​ក្រោម​នេះ៖

 

let result = 'Initial value'

resultPromise = new Promise(function(resolve,reject){
    if(result){
        setTimeout(function(){
            result = `The execution of statement`
            resolve(result)
        }, 3000)
    }else{
        reject('Error occured!!')
    }
})

resultPromise.then(function(result){
    console.log(result)
}).catch(function(err){
      console.log(err)
})