В этом блоге я постараюсь рассказать об основах обещаний в javascript.
Давайте поговорим об идее, прежде чем перейти к обещанию в коде javascript.
Обещание в javascript подобно обещанию в реальной жизни, например, отец обещает своей дочери принести шоколад, возвращаясь из офиса, и затем обещание должно быть выполнено, то есть отец приносит шоколад, или отклонено, отец не приносит шоколад.
Что такое обещание? Как мы можем создать обещание
Обещание — это объект, который создается после ответа на асинхронный вызов в коде javascript. Это позволяет асинхронным вызовам работать и возвращать синхронные значения, такие как успех или неудача обещания.
Обещание имеет три состояния…
- состояние ожидания: начальное состояние
- выполненное состояние: Обещание выполнено
- отвергнутое состояние: Promise Failed
Давайте создадим Promise в javascript.
Обещание создается функцией Promise, которая принимает функцию обратного вызова с двумя аргументами resolve и reject.
let createPromise = new Promise((resolve,reject)=>{
// promise defination
})
Теперь внутри этой функции обещания нам нужно определить само обещание, поэтому давайте рассмотрим пример обещания с разрешением, т.е. когда значение флага равно true, обещание разрешается и выдает сообщение, указанное в resolve, а если значение равно false, то выдает сообщение, указанное в rejected.
let createdPromise = new Promise((resolve ,reject)=>{
let flag = true ;
if(flag){
resolve("Promise Created")
}else{
reject("Promise Not Created")
}
})
Promise Created // for flag = true
Promise Not Created // for flag =false
Итак, как получить эти значения и вывести их на консоль? Нам нужно взаимодействовать с обещанием, поэтому мы используем .then(), и все, что в нем находится, будет запущено для resolve. Для получения отклоненного значения мы используем .catch().
let flag = true ;
if(flag){
resolve("Promise Created")
}else{
reject("Promise Not Created")
}
}).then((message) =>{
console.log(message) // prints Promise Created ( if flag=true )
}).catch((message)=>{
console.log(message) // prints Promise Not Created ( if flag=false )
})
Это похоже на обратные вызовы, но имеет более организованный и чистый способ.
Обещания очень удобно использовать, когда вам нужно что-то, что займет много времени, чтобы получить некоторые данные из API и сделать что-то с данными внутри .then() или получить ошибку внутри .catch(), если обещание будет отклонено.
Как Promise заменяет обратный вызов?
Давайте рассмотрим пример обратного вызова и то, как он работает, как показано в коде
var flag = true
function getUserName(callback,errorCallback){
if(flag){
callback("UserName")
}else{
errorCallback(" failed to get UserName ")
}
}
getUserName( ("message")=>{
console.log("success"+message) // print success Username (if flag = true)
},(error)=>{
console.log("rejected"+message) // print rejected failed to get Username (if flag = false)
} )
Давайте реализуем это в Promise
var flag = true
function getUserName(){
return new Promise((resovle , reject )=>{
if(flag){
resolve("UserName")
}else{
reject(" failed to get UserName ")
}
})
}
getUserName().then( ("message")=>{
console.log("success"+message) // print success Username (if flag = true)
}).catch((error)=>{
console.log("rejected"+message) // print rejected failed to get Username (if flag = false)
} )
Это очень похоже на обратный вызов, но более читабельно, и мы можем легко выполнить Channing на обещании с помощью функции .then().
Вот и все для Promise, надеюсь, вам понравилось.