promise 是什么
- 按照用途来解释:
- 主要用于异步计算
- 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
- 可以在对象之间,传递和操作promise,以帮助我们处理队列
promise 的由来
- javascript 包含大量的异步操作: 异步操作可以避免页面冻结
- javascript 为检查表单而生
- 创造它的首要目标是操作DOM
- nodeJs的出现:无堵塞,高并发
- 异步:AB工作的完成顺序,和他们交付的完成时间顺序无关
异步操作的常见语法
-
ajax请求:先调用外部函数,再执行内部回调函数,当外部函数执行完成,内部回调函数就会被执行
image.png
异步的出现场景:
- 浏览器中异步操作以事件为主
- 回调主要出现在ajax请求和File API
经典示例:
- 异步回调的问题:https://www.imooc.com/video/16611:
在异步回调过程中,无法正常使用try catch,只能通过return callback(err)函数的错误看出问题。(原因是:回调函数在执行的时候,已经和调用它的函数不在同一个堆栈中)
promise 入门
-
promise的使用:function(resolve, reject){} 传入的匿名函数称为执行器
resolve(), reject() 调用后,会改变new promise实例的状态,
实例的状态改变后,会调用then函数内部的处理函数
image.png - promise详解:
- promise是一个代理对象,它和原先要进行的操作并无关系
- 它通过引入一个回调,避免更多的回调
-
promise状态
image.png
image.png
image.png - 简单的promise实例:https://www.imooc.com/video/16613
console.log("here we go");
new Promise(resolve => {
setTimeout(() => {
resolve('hellow');
}, 2000);
}).then(value => {
console.log(value + "word");
});
console.log("here we go");
new Promise(resolve => {
setTimeout(() => {
resolve('hellow');
}, 2000);
})
.then(value => {
console.log(value);
return new Promise(resolve => {
setTimeout(() => {
resolve('world');
}, 2000);
});
})
.then(value => {
console.log(value + "world");
})
(本帖参考自慕课网讲师:Meathill)
网友评论