MDN上Promise基础例子
let myFirstPromise = new Promise(function(resolve, reject){
//当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时就会调用reject(...)
//在本例中,我们使用setTimeout(...)来模拟异步代码,实际编码时可能是XHR请求或是HTML5的一些API方法.
setTimeout(function(){
resolve("成功!"); //代码正常执行!
}, 250);
});
myFirstPromise.then(function(successMessage){
//successMessage的值是上面调用resolve(...)方法传入的值.
//successMessage参数不一定非要是字符串类型,这里只是举个例子
console.log("Yay! " + successMessage);
});
- 要搞清楚,
new Promise(function(resolve,reject){巴拉巴拉})这里巴拉巴拉写的内容就是当下正在执行的代码!!!! - 你可以点开console来试一试运行如下代码
new Promise(function(resolve, reject){
setTimeout(function(){
console.log('看到没有,我正在运行了啊!!!')
}, 250);
});
.then里面写的回调函数是等待Promise对象来调用滴
异步
异步常常用到回调,但是异步不是只有回调函数这一个手段 还可以是轮询
那我怎么知道一个函数是异步的还是同步的呢???
AJAX可以设置成同步的,但是没有任何意义,页面在你同步的时候根本无法动弹
摇色子--如何获取异步函数的结果
promise
Promise是前端解决异步问题的统一方案
// 核心代码就这句
return new Promise((resolve, reject)=>{...})
promise里的回调函数只能拥有一个参数
.then是哪里来的?
- new promise就是得到一个返回的对象或者就叫promise对象,.then只不过是这个对象里面的一个属性罢了
- resolve和reject并不是.then(succes,fail) 里面的success和fail,resolve 会去调用 success,reject 会去调用 fail
promise是不可以被取消的
axios针对这个promise的缺陷,给出了解决方案,给编号以取消请求而不是取消promise,promise不能被取消
面试官:为什么要用promise?
封装一个ajax函数