ES6 promise

Promise是在 JavaScript(也称为 ECMAScript-6)中实现异步编程的一种方式。JavaScript 中使用Promise进行异步编程。对于异步编程,JavaScript 使用回调,但使用回调会出现一个问题,即回调地狱(多个或依赖回调)或所谓的 "地狱金字塔"。使用 ES6 的Promise将简单地避免与回调相关的所有问题。

当处理基本情况时,回调很棒。但是,在开发具有大量代码的 Web 应用程序时,回调可能会带来很大的麻烦。在复杂情况下,每个回调都会增加一层嵌套,这会使你的代码变得非常混乱且难以理解。简单来说,代码中存在多个回调会增加代码的复杂性,包括可读性、可执行性等方面。这种过度嵌套的回调通常被称为回调地狱。

例子:回调地狱。

javascript 复制代码
f1(function(x){ 
	f2(x, function(y){ 
		f3(y, function(z){ 
			... 
		}); 
	}); 
}); 

为了解决这个问题,我们使用Promise而不是回调。

创建Promise:

当我们不确定分配的任务是否会完成时,就会创建一个Promise。Promise对象表示异步操作的最终完成(或失败)及其结果值。Promise始终处于以下状态之一:

fulfilled:与Promise相关的操作成功完成。

rejected:与Promise相关的操作失败。

pending:Promise仍在进行中,即尚未fulfilled或rejected。

settled:Promise已经fulfilled 或 rejected。

语法:

javascript 复制代码
const promise = new Promise((resolve,reject) => {....}); 

举例:

javascript 复制代码
const myPromise = new Promise((resolve, reject) => { 
    if (Math.random() > 0) { 
        resolve('Hello, I am positive number!'); 
    } 
    reject(new Error('I failed some times')); 
}) 

Promise的回调:

用于处理Promise的两种类型的回调是 .then() 和 .catch()。它可以用于处理Promise的实现或拒绝。

  • JavaScript .then() 方法

当Promise实现或拒绝时调用。它可以链接到处理Promise的实现或拒绝。它接受两个函数作为参数。第一个函数在fulfilled时调用,第二个(可选)在rejected时调用。

例子:使用 .then() 处理Promise拒绝

javascript 复制代码
var promise = new Promise((resolve, reject) => { 
    resolve('Hello, I am a Promise!'); 
}) 
  
promise.then((promise_kept_message) => { 
    console.log(promise_kept_message); 
}, (error) => { 
console.log(error); })

输出:

Hello, I am a Promise!

  • JavaScript .catch() 方法:

这可以用于处理错误(如果有)。它只接受一个函数作为参数,该函数用于处理错误(如果有)。

例子:使用 .catch() 处理rejected

javascript 复制代码
const myPromise = new Promise((resolve, reject) => { 
	if (Math.random() > 0) { 
		console.log('resolving the promise ...'); 
		resolve('Hello, Positive :)'); 
	} 
	reject(new Error('No place for Negative here :(')); 
}); 

const Fulfilled = (fulfilledValue) => console.log(fulfilledValue); 
const Rejected = (error) => console.log(error); 
myPromise.then(Fulfilled, Rejected); 

myPromise.then((fulfilledValue) => { 
	console.log(fulfilledValue); 
}).catch(err => console.log(err));

输出:

javascript 复制代码
resolving the promise ...
Hello, Positive :)
Hello, Positive :)
相关推荐
开心工作室_kaic21 分钟前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
刚刚好ā21 分钟前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
沉默璇年2 小时前
react中useMemo的使用场景
前端·react.js·前端框架
yqcoder2 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
2401_882727572 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
SoaringHeart2 小时前
Flutter进阶:基于 MLKit 的 OCR 文字识别
前端·flutter
会发光的猪。3 小时前
css使用弹性盒,让每个子元素平均等分父元素的4/1大小
前端·javascript·vue.js
天下代码客3 小时前
【vue】vue中.sync修饰符如何使用--详细代码对比
前端·javascript·vue.js
猫爪笔记3 小时前
前端:HTML (学习笔记)【1】
前端·笔记·学习·html
前端李易安3 小时前
Webpack 热更新(HMR)详解:原理与实现
前端·webpack·node.js