zoukankan      html  css  js  c++  java
  • 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)
        })
  • 相关阅读:
    C#之集合常用扩展方法与Linq
    PHP核心之MVC设计模式
    Javascript高级之变量
    Javascript高级之console调试
    Javascript高级之概述
    MySQL数据库之PDO扩展
    MySQL数据库之MySQL扩展
    MySQL数据库之数据库备份与还原
    MySQL数据库之预处理
    MySQL数据库之函数
  • 原文地址:https://www.cnblogs.com/qingshanyici/p/11657493.html
Copyright © 2011-2022 走看看