リクエストを書くには、成功に変数に割り当てられたコールバック関数res.dataに会うだろう、しかし、まだ未定義の問題wx.request外で次のように、状況は次のとおりです。
私たちが期待ためには、テキストは、外で、ハイテクの出力値を持つ必要があります
ONLOAD:機能(オプション){ VARのテキスト= " HI " はconsole.log(テキスト)。 wx.request({ URL: 、 方法:" 取得" 、 データ:{ " MSG " :{ " idCard ": } }、 ヘッダ:{ " コンテンツタイプ":" アプリケーション/ JSON;のcharset = UTF-8 " } 、 成功:関数(RES){ にconsole.log(res.data.msg)。で" にconsole.log(テキスト); } })、 テキスト = " アウト" ; はconsole.log(テキスト); }
しかし、結果は次のとおりです。
理由:wx.requestが非同期要求で、JSは、JSの順序は、最初、最も外側のテキストを実行され、他のデータは、サーバによって返され、その後、コールバック関数を実行するようにした後、wx.requestが完成している待ってからダウン実行されません。
どのように解決するには?
1.私たちは、私が使用する必要がある場合には、この第2の要求データが悲惨な月戻り、私は、コールバックに入れて、単に大丈夫、成功コールバック関数内で変数の値を設定したいですリクエストは、そう何回か繰り返して、私は非常に酸を冷却すると考え、「コールバック地獄。」それだと呼ばれる用語があります。
2.約束処理、マイクロチャネルは、現在サポート約束を有しており、次のように変換されます。
ONLOAD:機能(オプション){ VARのテキスト= " HI " はconsole.log(テキスト)。 CONST約束= 新しいプロミス(関数(決意、リジェクト){ wx.request({ URL:" " 、 方法:" 取得" 、 データ:{ " MSG " :{ " idCard ":" " 、 } }、 ヘッダ:{ " Content-Typeの":" アプリケーション/ JSON。" }、 成功:関数(RES){ にconsole.log(res.data.msg); テキスト = " 中" はconsole.log(テキスト); 解決(); } }) })promise.then(関数() { テキスト = 「OUT 」 にconsole.log(テキスト); }関数(){})//最初の機能が解決状態により行われるが、第二の状態は、関数の実行が拒否され 、}
約束の詳細:https://es6.ruanyifeng.com/#docs/promise
変換結果: 成功!!
個人的な理解は、意味の約束は、要求に小さな差異を入れていない機能からより簡潔な内容、明瞭さ、感触と書き込みのコールバック関数で、その構造的利点の数が反映されます。
var p1は= 新しい約束(機能(解決、拒否){ fs.readFile(' ' 、機能(ERR、データ){ 場合(ERR){ はconsole.log(" 実行p1が拒否" ) 拒否(ERR) } 他{ コンソールを.logの(" ランP1の解決" ) レゾール(data.toString()) } }) }) VaRの P2 = 新しいプロミス(関数(決意、リジェクト){ fs.readFile(' ' 、関数(ERR、データ){ もし(ERR){ はconsole.log(" 実行p2が拒否" ) 拒否(ERR) } 他{ はconsole.log(" 実行P2の解決" ) レゾール(data.toString()) } }) }) のvar P3 = 新しい約束(関数(解決、リジェクト){ fs.readFile(' ' 、関数(ERR、データ){ 場合(ERR){ にconsole.log(" ランP3が拒否" ) リジェクト(ERR) } さもなければ { console.log(" ランP3の解決" ) レゾール(data.toString()) } }) }) p1.then(関数(データ){ にconsole.log(' P1次に解決' 、データ) のリターンP2 }) .then (関数(データ){ にconsole.log(' P2次に解決' 、データ) のリターンP3 }) .then(関数(データ){ にconsole.log(' P3次に解決' 、データ) })
すべての約束については、戻り値は目的を達成するために、次の約束に渡されることを確認するには簡単に通過してきた、それは非常に明確ではありません!