14-Promise

 

1、Promise是什么?

答:一种解决异步的方案。本身是个对象。

 

2、Promise的特点?

答:(1) 共有3个状态。进行中pending、已成功fulfilled和已失败rejected。

(2)状态一旦改变就不会再发生变化。

(3)新建后立即执行。

 

3、语法?

答:

var promise = new Promise((resolve,reject)=>{
    if(success){
        resolve(value)
    } else {
        reject(reject)
    }
})

 

 

4、Promise两个参数的类型?

答:这个参数都是函数。

 

5、Promise的回调?

答:then。Promise实例生成后,可以用then方法分别制定Resolved状态和Rejected状态的回调。

 

5.1、实例

promise新建后就会立即执行。

这个实例中可以看出来,promise创建是通过new 一个Promise,new了之后会立即执行。通过resolve函数往then里面携带数据。

但是不是执行完promise后会立即执行then。

function test(){
    console.log("timeHere")
    setTimeout(()=>{
        console.log("doTimeOut")
    }, 2000)
}
let promise = new Promise((resolve, reject)=>{
    let a = 1
    console.log(a)
    resolve(a)
})

promise.then((value)=>{    
    console.log("resolved-->>", value)
})
test()
console.log("Hi")

//输出的顺序是: 1 timeHere Hi resolved-->>1 doTimeOut

 

 

6、异步加载图片的方法?

答:

function loadImgAsync(url){
    return new Promise((resolve,reject)=>{
        var image = new Image();
        image.onload = function (){
            resolve(image)
        };
        image.onerror = function (){
            reject(new Error('img is wrong of ' + url));
        };

        image.src = url;
    });
}

 

 

7、Promise实现Ajax?

答:

var getJson = function(url) {
    var promise = new Promise((resolve,reject) => {
        var client = new XMLHttpRequest();
        client.open("GET", url);
        client.onreadystatechange = handler;
        client.responseType = "json";
        client.setRequestHeader("Accept", "application/json");
        client.send();

        function handler() {
            if (this.status !== 4){
                return
            }
            if (this.status == 200){
                resolve(this.response);
            } else {
                reject (new Error (this.statusText));
            }
        };
    });
    return promise;
};

getJson("/post.json").then((json)=>{
    console.log(json)
},()=>{
    console.error(error)
})

 

 7.1、两个Promise可以实现什么?

如果让一个Promise的resolve参数为另一个Promise,会发生什么?

 

 

8、then的参数是什么?

第一个是成功的回调,第二个是失败的回调。

 

9、写几个使用promise的例子。

 

timeout(ms) {
    return new Promise((resolve, reject) =>{
      setTimeout(resolve, ms, 'done');
    })
  }
    this.timeout(1000).then((value)=>{
      console.log(value)
    })

 

posted @ 2020-05-28 09:59  qingshanyici  阅读(161)  评论(0编辑  收藏  举报