មុននឹងចូលដល់ការសិក្សាពី ការសន្យា (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)
})