Se detalla la promesa de ES6

prefacio

Promesa, para resolver el problema causado por el área de devolución de llamada, la operación de funcionamiento asíncrono a modo síncrono expreso de programación, evitar la llamada de retorno anidada.

¿Qué es la promesa

El llamado promesa, simplemente significa que un contenedor, que lleva a cabo un evento en el futuro será el final (es decir, nuestra operación asíncrona) resultados. Para la gramática anterior, Promise es un objeto, el mensaje puede ser obtenida de su funcionamiento asíncrono. Promesa de proporcionar una API unificada, una variedad de operaciones asincrónicas puede ser manejado de la misma manera.

propiedades Promise

  • promesa objeto representa una operación asíncrona, hay tres estados: pendiente, cumplido, rechazar
  • Cualquier otro estado puede cambiar ese estado. Este es también el origen del nombre de la promesa. 'Compromiso' significa otros medios no pueden cambiar su estado.

Promesa aparece para solucionar cualquier problema

prometen la programación asincrónica es en realidad un programa, siempre habrá presentarse ante la promesa de código anidado para la denominada 'zona de vuelta' de

    step(1, function() {
        step(2, function() {
            step(3, function() {
                ……….
            })
        })
    })

Sabemos que este "infierno de devolución de llamada", es un pueblo muy enojado escribir el formato de código, hará que la gente sospecha leer la vida después de capas anidadas. Pero este "infierno de devolución de llamada" Realmente el único formato incorrecto problema? Obviamente no.

Ejemplos de referencias

Un ejemplo de "YDKJS": Un programador ha desarrollado un sistema de pago, que es un buen centro desde hace mucho tiempo. De repente un día, un cliente en el momento de la tarjeta de crédito de pago era el cepillo continua cinco veces. La investigación de la tarde programador encontró que una biblioteca de herramientas de terceros por alguna razón la devolución de llamada de pago realiza cinco veces. Después de la comunicación con los problemas en equipo de terceros ha sido resuelto.

Muy por encima de ejemplo es un problema de la función de devolución de la confianza conducirá a una gran cantidad de problemas de confianza, tales como llamada repetida, la llamada demasiado tarde y así sucesivamente. Entonces, ¿cómo la promesa de resolver estos dos problemas?

importancia promesa

  • Legibilidad
    primer método es entonces la promesa, nos apoya por escrito a continuación el método de devolución de llamada, por lo que podemos ver claramente en el desarrollo diario, tales como el código anterior se puede reescribir como
     Promise.resolve(1).
     .then(step => ++setp)
     .then(step => ++setp)
     .then(step => ++setp)
 ...

  • Rigor Promise compromisos
    diferencia entre ella y la forma en que devolución de llamada ordinaria

de manera general , el éxito de la operación después de la devolución de llamada por escrito directamente dentro de una función de devolución de llamada para invocar estas operaciones son controladas por un tercero

Promesa modo de devolución de llamada sólo es responsable de la notificación después del éxito, y el éxito de la operación después de la función de devolución de llamada de retorno luego se coloca en el interior, un control preciso de la promesa.

Nota estado Promise es irreversible. Una vez que el cambio no es una forma de cambiar en cualquier estado. única promesa asíncrona, no se produce la llamada asincrónica síncrona.

deficiencias Promise

  • Nueva promesa no puede ser cancelada una vez que se ejecutará inmediatamente, no pueden ser canceladas durante
  • Si no se establece una función de devolución de llamada, error interno promesa lanzada no reacciona con el exterior.
  • Cuando está en estado pendiente, actualmente no hay manera de saber dónde etapa (al inicio o al final)

Cómo utilizar la promesa

objeto Promise es un constructor para generar instancias Promise

Prometer un constructor función recibe como parámetro, dos parámetros son la determinación función y rechazan, estos dos parámetros son funciones proporcionadas por el código JavaScript, sin necesidad de añadir su propio

Después de generar Promise ejemplo, puede especificar una función de devolución de llamada estado resuelto por estado y luego rechazó Métodos. Pero entonces por lo general no se recomienda añadir dos parámetros recomendados .then terminado de resolverse estado, utilizando la .catch terminó rechazado. De esta manera:

    const promise = new Promise( (resolve,reject) => {
        resolve('ok');
        reject('error')
    })
    promise.then(res => {
        console.log(res)
    }).catch(err => {
        console.log(err)
    })

Ajax operaciones también pueden implementarse con una promesa:

const getJSON = function(url){
        const promise = new Promise((resolve,reject) => {
            const handler = function(){
                if(this.readyState !== 4){//这两个if语句主要用来判断请求是否成功
                    return;
                };
                if(this.status === 200){
                    resolve(this.response)//这是成功请求后,将返回的数据传到回调函数中
                }else{
                    reject(new Error(this.statusText))//这是失败后,将原因返给catch
                }
            };
            const xmlHttp = new XMLHttpRequest();//声明一个XMLHttpRequest对象的实例
            xmlHttp.open("get", url);//设置要发送的方法和地址
            xmlHttp.onreadystatechange = handler;//在这里调用上面定义的handler
            xmlHttp.responseType = "json";
            xmlHttp.setRequestHeader("Accept", "application/json");//设置请求头,规定接受json类型的数据
            xmlHttp.send();//真正的发送请求
        });
        return promise;
    };
    getJSON("url").then( res => {
        //成功后的操作
    }).catch(err => {
        //失败后的提示
    })

Promise se pueden anidar, es para resolver una promesa como otro ejemplo del método de parámetro Ejemplo Promise.

Entonces hablar del método, que se define en un prototipo Promise, a continuación, el método devuelve una nueva instancia Promise, se puede escribir usando la cadena, entonces el último método es decir llama entonces otro método.

dejadme que ahora varias API común Promise él!

Promise.prototype.finally ():

Por último, un procedimiento para el funcionamiento Lo que se ejecutará el estado final de objeto promesa

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

Promise.resolve ():

  • Este método se utiliza para convertir el parámetro a una promesa objetivo
  • parámetro Promise es un ejemplo: sin cambios
  • Parámetro es una objetos thenable: Este objeto se convertirá objeto Promise y luego ejecutar inmediatamente método de objeto thenable.
  • A continuación, el argumento no es un objeto tiene un método, o, simplemente, no es un objeto: Las devoluciones se resuelve un nuevo estado del objeto Promise
  • Promesa objeto ersolved vuelve directamente un estado: no hay parámetros

Promise.reject () método Promise.reject (razón) también devuelve una nueva instancia Promise, se rechaza el estado de la instancia

Promise.all ():

    const p = Promise.all([p1, p2, p3]);

Promesa para la pluralidad de instancias, empaquetado en una nueva instancia Promise. Este método recibe una matriz como un parámetro, y son Promise ejemplo, el método si no, será primero llamar Promise.resolve. Nota: Sólo cuando una instancia de la matriz se cumplen estado, se convertirá en un p Cumplido, en este momento, p1, p2, p3, compuesto de una matriz del valor de retorno, p se pasa a la función de devolución de llamada. Entre larga p1, p2, p3 es un rechazado, el estado se convierte en el p Rechazado, valores de retorno en este momento es la primera instancia de la rechazan, se pasa a la función de devolución de llamada p.

Promise.race (): y similares todos los métodos, está hablando en una pluralidad de instancias Promise envasados. Pero no es lo mismo, siempre y cuando no es un caso entre p1, p2, p3 plomo cambia de estado, el estado p para cambiar con él. Promesa de devolver el valor de esa instancia de la primera a cambiar, se pasa a la función de devolución de llamada p.

En el desarrollo real, siempre queremos hacer la función de sincronización ejecutada de forma síncrona, asíncrona ejecutar una función asíncrona, pero si desea utilizar las funciones sincrónicas promesa de hacer el procesamiento, podemos sincronizarlo? La respuesta es sí. Esto viene a Promise.try () método de

    const f = () => console.log('now');
    Promise.try(f);
    console.log('next');
// now// next

imagen

Publicado 35 artículos originales · ganado elogios 64 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/tjx11111/article/details/104390323
Recomendado
Clasificación