アプレットのアイテムを再生(ⅱ)wx.requestは、非同期リクエストを処理します

リクエストを書くには、成功に変数に割り当てられたコールバック関数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次に解決' 、データ)
})

 

すべての約束については、戻り値は目的を達成するために、次の約束に渡されることを確認するには簡単に通過してきた、それは非常に明確ではありません!

 

おすすめ

転載: www.cnblogs.com/xmjs/p/12590479.html