Repetir item de aplicação (ii) wx.request processamento de pedidos assíncronos

Ao escrever pedido, se reunirá na res.data função de retorno atribuído à variável no sucesso, no entanto, ainda é problema indefinido wx.request fora, a situação é a seguinte:

 

Na ordem que esperávamos, o texto deve ter um valor de oi saída, dentro, para fora

  onLoad: function (options) {
     var text = " oi " 
    console.log (texto); 
    wx.request ({ 
      url: , 
      método: " obter " , 
      de dados: { 
        " msg " : {
           " IDcard " : 
        } 
      }, 
      cabeçalho: { 
        " Content-Type " : " application / json; charset = UTF-8 " 
      } , 
      o sucesso: function (res) { 
        console.log (res.data.msg);em " 
        console.log (texto); 
      }, 
    }) 
    text = " fora " ; 
    console.log (texto); 
  },

 

No entanto, o resultado é: 

 

O motivo: wx.request é uma solicitação assíncrona, que JS não espere wx.request está terminado e em seguida, executar para baixo, de modo que após a ordem JS será executado primeiro texto mais externa e outros dados retornados pelo servidor, e em seguida, executar a função de retorno de chamada.

 

Como resolver?

1. Queremos definir o valor da variável na função de sucesso de retorno de chamada, simplesmente tudo bem, se eu preciso usar este segundo dados da solicitação retornado pode miserável, e eu colocá-lo em um callback pedido, de modo repetido várias vezes, eu acho que o ácido muito legal, existe um termo chamado "callback inferno." é isso.

 

2. processamento promessa, micro-canal tem agora promessa de suporte, e a transformação é a seguinte:

onLoad: function (options) {
     var text = " oi " 
    console.log (texto); 
    const promessa = new (função Promise (determinação, rejeitar) { 
    wx.request ({ 
      url: " " , 
      método: " obter " , 
      de dados: { 
        " msg " : {
           " IDcard " : " " , 
        } 
      }, 
      cabeçalho: { 
        " Content-Type " : " application / json;" 
      }, 
      Sucesso: function (RES) { 
        o console.log (res.data.msg); 
        text = " no " 
        o console.log (texto); 
        Resolve (); 
      }, 
    }) 
    }) promise.then (function () { 
     text
    = " OUT " 
     o console.log (texto); 
    } function () {}) // a primeira função é executada pelo estado resolvido, o segundo estado é a execução da função rejeitado 
  },

promessa Detalhes: https://es6.ruanyifeng.com/#docs/promise


O resultado da transformação:   Sucesso! !

 

 entendimento pessoal, promessa de significado é a função de retorno de um conteúdo mais conciso, clareza, sentir e escrever uma função para não colocar pequena diferença no pedido, o número de sua vantagem estrutural reflete:

var p1 = new (função Promise (determinação, rejeitar) { 
    fs.readFile ( '  ' , function (err, dados) {
         se (err) { 
            console.log ( " p1 run rejeitar " ) 
            rejeitar (err) 
        } else { 
            consola log ( " run p1 determinação " ) 
            resol (data.toString ()) 
        } 
    }) 
}) 
 
var p2 = new Promise (function (determinação, rejeitar) { 
    fs.readFile ( '  ' , function (err, dados) {
         se(err) { 
            console.log ( " p2 run rejeitar " ) 
            rejeitar (err) 
        } else { 
            console.log ( " run p2 determinação " ) 
            resol (data.toString ()) 
        } 
    }) 
}) 
 
var P3 = new Promise ( function (determinação, rejeitar) { 
    fs.readFile ( '  ' , function (err, dados) {
         se (err) { 
            console.log ( " P3 executar rejeitar " ) 
            rejeitar (err) 
        } else {
            console.log ( " run P3 determinação " ) 
            resol (data.toString ()) 
        } 
    }) 
}) 
 
p1.then (function (data) { 
    console.log ( ' p1 então resolve ' , dados)
     retorno p2 
}) 
.then (function (data) { 
    console.log ( ' p2 então resolve ' , dados)
     retorno p3 
}) 
.then (function (data) { 
    console.log ( ' P3 então resolve ' , data) 
})

 

Fácil de ver que todos os aspectos promessa o valor de retorno é passado para a próxima promessa, para atingir o objectivo tem sido repassado, não é muito claro!

 

Acho que você gosta

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