Repetir elemento applet de (ii) wx.request procesar solicitudes asíncronas

Por escrito la solicitud, se reunirá en el res.data función de llamada asignada a la variable en el éxito, sin embargo, sigue siendo un problema sin definir wx.request exterior, la situación es la siguiente:

 

En el orden que esperábamos, el texto debe tener un valor de salida de alta, dentro, fuera

  onLoad: function (opciones) {
     var texto = " hi " 
    console.log (texto); 
    wx.request ({ 
      url: , 
      método: " obtener " , 
      los datos: { 
        " msg " : {
           " IDcard " : 
        } 
      }, 
      encabezado: { 
        " Content-Type " : " application / json; charset = UTF-8 " 
      } , 
      el éxito: la función (res) { 
        console.log (res.data.msg);en " 
        console.log (texto); 
      }, 
    }), 
    texto = " fuera " ; 
    console.log (texto); 
  },

 

Sin embargo, el resultado es: 

 

La razón: wx.request es una solicitud asincrónica, JS no espera wx.request está terminado y luego ejecutar hacia abajo, por lo que después de la orden se ejecutará JS primer texto más externa, y otros datos devueltos por el servidor, y luego ejecutar la función de devolución de llamada.

 

¿Cómo resolver?

1. Queremos establecer el valor de la variable en la función de devolución de llamada de éxito, simplemente bien, si tengo que utilizar este segundo datos de la solicitud devueltos pueden desgraciado, y lo puse en una devolución de llamada solicitud, por lo repetidas varias veces, creo ácido muy fresco, hay un término llamado "devolución de llamada infierno." eso es todo.

 

2. Procesamiento de promesa, micro-canal tiene ahora promesa de apoyo, y la transformación es la siguiente:

onLoad: function (opciones) {
     var texto = " hi " 
    console.log (texto); 
    const promesa = nueva promesa (function (resolución, rechazar) { 
    wx.request ({ 
      url: " " , 
      método: " obtener " , 
      los datos: { 
        " msg " : {
           " IDcard " : " " , 
        } 
      }, 
      encabezado: { 
        " Content-Type " : " application / json;" 
      }, 
      El éxito: función (RES) { 
        el console.log (res.data.msg); 
        texto = " en " 
        la console.log (texto); 
        Resolve (); 
      }, 
    }) 
    }) promise.then (function () { 
     texto
    = " OUT " 
     la console.log (texto); 
    } function () {}) // la primera función se realiza por el estado resuelto, el segundo estado es un ejecución de la función rechazó 
  },

Detalles promesa: https://es6.ruanyifeng.com/#docs/promise


El resultado de transformación:   el éxito! !

 

 comprensión personal, promesa de significado es la función de devolución de llamada de un contenido más concisa, la claridad, la sensación y la escritura a cabo una función de no poner pequeña diferencia en la solicitud, el número de su ventaja estructural refleja:

var p1 = nueva promesa (function (resolución, rechazar) { 
    fs.readFile ( '  ' , la función (err, datos) {
         si (err) { 
            console.log ( " P1 ejecución rechazan " ) 
            rechazar (err) 
        } otro { 
            consola .log ( " run p1 determinación " ) 
            de resol (data.toString ()) 
        } 
    }) 
}) 
 
var P2 = nueva promesa (function (resolución, rechazar) { 
    fs.readFile ( '  ' , la función (err, datos) {
         si(err) { 
            console.log ( " P2 ejecución rechazan " ) 
            de rechazo (err) 
        } otro { 
            console.log ( " run p2 determinación " ) 
            de resol (data.toString ()) 
        } 
    }) 
}) 
 
var P3 = nueva promesa ( función (resolución, rechazar) { 
    fs.readFile ( '  ' , la función (err, datos) {
         si (err) { 
            console.log ( " p3 ejecución rechazan " ) 
            rechazar (err) 
        } demás {
            console.log ( " run p3 determinación " ) 
            de resol (data.toString ()) 
        } 
    }) 
}) 
 
p1.then (function (datos) { 
    console.log ( ' p1 entonces determinación ' , datos)
     de retorno p2 
}) 
.then (function (datos) { 
    console.log ( ' p2 entonces determinación ' , datos)
     de retorno p3 
}) 
.then (function (datos) { 
    console.log ( ' p3 entonces determinación ' , los datos) 
})

 

Fácil de ver que cada promesa respecto al valor de retorno se pasa a la siguiente promesa, para lograr el propósito ha sido transmitido, no es muy claro!

 

Supongo que te gusta

Origin www.cnblogs.com/xmjs/p/12590479.html
Recomendado
Clasificación