我是靠谱客的博主 重要天空,最近开发中收集的这篇文章主要介绍promise理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

promise作用

Promise是异步编程的一种解决方案,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,可以从对象获取异步操作的消息。

promise解决回调地狱

回调地狱是指异步深层嵌套问题,在promise实例的then中继续返回一个promise实例等,并且每种任务的处理结果存在两种可能性(成功或失败),那么需要在每种任务执行结束后分别处理这两种可能性。
Promise 的诞生就是为了解决这两个问题。Promise 利用了三大技术手段来解决回调地狱:回调函数延迟绑定、返回值穿透、错误冒泡。
举例:

let readFilePromise = (filename) => {
fs.readFile(filename, (err, data) => {
if(err) {
reject(err);
}else {
resolve(data);
}
})
}
readFilePromise('1.json').then(data => {
return readFilePromise('2.json')
});

回调函数是在then里面声明的,而不是另外申明,这个即是延迟绑定。简化上述代码为:

readFilePromise('1.json').then(data => {
return readFilePromise('2.json');
}).then(data => {
return readFilePromise('3.json');
}).then(data => {
return readFilePromise('4.json');
});

代码中将返回的 Promise对象 穿透到外层,以供后续的调用,即是返回值穿透。为了解决每次执行结束后处理成功和失败两种结果,采用错误冒泡的方法,代码:

readFilePromise('1.json').then(data => {
return readFilePromise('2.json');
}).then(data => {
return readFilePromise('3.json');
}).then(data => {
return readFilePromise('4.json');
}).catch(err => {
// xxx
})

前面产生的错误会一直向后传递,被 catch 接收到,例如链式使用3个Promise,任何一个Promise的错误都能被最外面那个catch捕获。

promise三种状态

待定(pending):初始状态,既没有被完成,也没有被拒绝。
已完成(fulfilled):操作成功完成。
已拒绝(rejected):操作失败。

promise all、race、any方法

all
1.所有请求都成功返回一个数组,包括所有请求的结果
2.有一个请求返回错误,则返回该请求的结果
race
只要 有一个Promise实例率先改变状态,则返回该状态
any
只要有一个Promise实例变成 fullfilled 状态,最后 any 返回的实例就会变成 fullfilled 状态;如果所有参数 Promise 实例都变成 rejected 状态,包装实例就会变成 rejected 状态。

手写promise

待续。。。。

最后

以上就是重要天空为你收集整理的promise理解的全部内容,希望文章能够帮你解决promise理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部