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!