异步与promise

102 阅读2分钟

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函数

axios好在哪里?

谈封装 初中高级程序员有何区别?