私とRxプログラミングを学びます--検証コードを取得します
2188 ワード
この例では fromEvent interval map take tap switchMapTo
ビジネスロジック認証コード取得ボタン をクリック認証コードボタンのグレーを取得し、N秒カウントダウン を開始する.カウントダウン終了ボタンクリック可能状態回復 一般的な書き方
機能は複雑ではありませんが、前のビジネスロジックではなく、コードを直接見ている場合は、この3つのロジックが含まれていることを少し理解する必要があります.次に、Rxプログラミングによって、このビジネスロジックを実現します.
まずイベントフローsendObをクリックする必要があります.ボタンをクリックするたびにこのsendObからイベントが送信されます.
これはコールバック関数とあまり差がないように見えるが,組み合わせるとRxの威力を示す.
カウントダウンを生成するためにイベントフローが必要です
説明interval(1000)は毎秒1回のイベントを発生し、0,1,2,3…map操作は、N,N−1,N−2に変換され、…(N=60であれば60,59,58に相当…)take(N)操作は、N番目のイベントが到着した後、イベントフローが完了し、interval(1000)はイベントの配布を停止する
intervalは内部でclearInterval操作を行います.
クリック完了後に認証コードを送信する論理で、カウントダウンイベントを生成します.
take(1)は、ボタンのクリックをサブスクリプション後に1回だけ有効にする(狂点ボタンは、1回目のみ有効である)、再有効にする必要がある場合は(他の方法でこの論理を実現することもできる)switchMapToは、イベントをトリガーした後、coolDownObイベントフローをアクティブにし、サブスクリプションにこのイベントフローのイベントを受け入れさせる.
最後に、このイベントフローを購読し、論理を実行する必要があります.
subscribeの3番目のパラメータはイベントを完了することであり、enableGetVcodeを転送し、「ループ」を形成します.ボタンは再び傍受され、新しい認証コードの取得を開始します.
Rxを使用したプログラミング後状態変数 を定義する必要はなくなりました.論理は完全ないくつかの に分離される.論理 の修正が容易は、基本論理 を多重化するために、より多くの論理を組み合わせることができる.
ビジネスロジック
var enabled = true
var remainTime = N
var id = null
sendBn.on('click',function(){
if(enabled){
sendSms()
enabled = false
gray(true)
remainTime = N
id = setInterval(cooldown,1000)
}
})
function cooldown(){
remainTime --
sendBn.label = remainTime + " "
if(remainTime==0){
clearInterval(id)
enabled = true
sendBn.label = " "
gray(false)
}
}
機能は複雑ではありませんが、前のビジネスロジックではなく、コードを直接見ている場合は、この3つのロジックが含まれていることを少し理解する必要があります.次に、Rxプログラミングによって、このビジネスロジックを実現します.
まずイベントフローsendObをクリックする必要があります.ボタンをクリックするたびにこのsendObからイベントが送信されます.
let sendOb = fromEvent(sendBn,'click')//
これはコールバック関数とあまり差がないように見えるが,組み合わせるとRxの威力を示す.
カウントダウンを生成するためにイベントフローが必要です
let coolDownOb = rxjs.interval(1000).pipe(map(_ => N - _), take(N))
説明interval(1000)は毎秒1回のイベントを発生し、0,1,2,3…map操作は、N,N−1,N−2に変換され、…(N=60であれば60,59,58に相当…)take(N)操作は、N番目のイベントが到着した後、イベントフローが完了し、interval(1000)はイベントの配布を停止する
intervalは内部でclearInterval操作を行います.
クリック完了後に認証コードを送信する論理で、カウントダウンイベントを生成します.
let getVCodeOb = sendOb.pipe(take(1), tap(() => {
sendSms()//
gray(true)//
}), switchMapTo(coolDownOb))
take(1)は、ボタンのクリックをサブスクリプション後に1回だけ有効にする(狂点ボタンは、1回目のみ有効である)、再有効にする必要がある場合は(他の方法でこの論理を実現することもできる)switchMapToは、イベントをトリガーした後、coolDownObイベントフローをアクティブにし、サブスクリプションにこのイベントフローのイベントを受け入れさせる.
最後に、このイベントフローを購読し、論理を実行する必要があります.
function enableGetVCode () {
gray(false)//
getVCodeOb.subscribe(num => sendBn.label = num + " ", console.error, enableGetVCode)
}
enableGetVCode()
subscribeの3番目のパラメータはイベントを完了することであり、enableGetVcodeを転送し、「ループ」を形成します.ボタンは再び傍受され、新しい認証コードの取得を開始します.
Rxを使用したプログラミング後