promise的用法:
1,promise按照用途来解释:
(1)主要用于一步计算;
(2)可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果;
(3)可以在对象之间传递和操作promise,帮助我们处理队列。
2,异步产生:(浏览器中的JavaScript)
(1)异步操作以事件为主;
(2)回调主要出现在Ajax和File API;
(3)Node.js对异步的依赖加剧(无阻塞高并发,是Node.js的招牌,异步操作是其保 障,大量操作依赖回调函数。)使用Node.js时,稍有不慎,就会踏入“回调地狱”。
3,回调产生4个问题:
(1)嵌套层次很深,难以维护;
(2)无法正常使用return和throw;
(3)无法正常检索堆栈信息;
(3)多个回调之间难以建立联系;
4,promise详解:
new promise(
//执行器
function(resolve,reject){
//一段耗时很长的异步操作
resolve(); //数据处理完成
reject(); //数据处理出错
}
)
.then(function A() {
// 成功,下一步
},function B(){
// 失败,做相应处理
});
- promise 是一个代理对象,它和原先要进行的操作并无关系,只是把原先的操作放在了执行器里面;
- 它通过引入一个回调,以此把其他的回调展开,全部变成基于promise的回调,避免更多的回调。
- promise有3个状态:
(1)pending 【待定】初始状态;
(2)fulfilled 【实现】操作成功;
(3)rejected 【被否决】操作失败; - 当promise状态发生改变,就会触发.then()里的响应函数处理后续步骤;
- promise状态一经改变,不会再变。
5,假如一个promise已经完成,再.then()会怎样?
在任何地方生成了promise队列之后,我们可以把promise作为一个变量传递到其他地方
let promise = new Promise (resolve => {
setTimeout(()=>{
console.log("the promise fulfilled");
resolve("hello,world");
},1000);
});
setTimeout(()=>{
promise.then(value => {
console.log(value);
});
},3000);
// 打印结果:
// the promise fulfilled
// hello,world
6,.then()详解:
- .then() 接受两个函数作为参数,分别代表fulfilled和rejected;
- .then()返回一个新的promise实例,所以它可以链式调用;
- 当前面的promise状态改变时,.then()根据其最终状态选择特定的状态响应函数执行;
- 状态响应函数可以返回新的promise或其它值;
- 如果返回新的promise,那么下一级.then()会在新的promise状态改变之后执行;
- 如果返回其它任何值,则会立刻执行下一级.then()。
- .then()里面有.then()的情况:
因为.then()返回的还是promise实例,会等里面的.then()执行完再执行外面的。