2017-10-11 10 views
2

은 명확성을 위해 편집유쾌한와 DotLiquid

어떻게 든이 작품

는 "작동"으로
let txnAccA = 
    let sqlStr = "select JSON from Store.Txn" 
    let result = Db.execute sqlStr Config.oConnStr 
    match result with 
    | Some a -> 
     [for i in a do 
      let msg = JsonConvert.DeserializeObject<TxnAccA>(i) 
      yield msg 
      ] 

    | _ -> 
     List.empty<TxnAccA> 

let txnAmtA = 
    let sqlStr = "select JSON from Store.Amt" 
    let result = Db.execute sqlStr Config.oConnStr 
    match result with 
    | Some a -> 
     [for i in a do 
      let msg = JsonConvert.DeserializeObject<TxnAmtA>(i) 
      yield msg 
      ] 

    | _ -> 
     List.empty<TxnAmtA> 

let result()= {Acc= txnAccA; Amt= txnAmtA} 
path "/txn" >=> warbler (fun _ -> page "txn.html" (result())) 

나는 페이지가 아닌 의미 있음 정적, 그것은 데이터베이스에서 최신 데이터를 표시합니다. 왜 그런가?

+0

여기서'txnAcc'와'txnAmt'는 정의되어 있습니까? 개발자가 정의한 방식이 문제 일 수 있습니다 (예 : 한 번만 설정 됨). 코드의 일부를 확인해야합니다. – rmunn

+0

오류는 무엇입니까? –

+0

안녕하세요 Tomas, 오류가 없습니다. db의 레코드가 변경 되었더라도 페이지가 동일한 데이터를 계속 표시합니다. – himekami

답변

2

txnAccAtxnAmtA은 (result과 유사) 기능이되어야합니다. 그것들은 이제 값으로 정의되므로 한번 할당하면 모든 요청에 ​​대해 DB를 쿼리하지 않습니다. result은 호출 될 때마다 새 레코드를 만들지 만 값은 항상 동일하게 유지됩니다.

let txnAccA() = //... 

let txnAmtA() = //... 

let result() = { Acc = txnAccA(); Amt = txnAmtA() } 
path "/txn" >=> warbler (fun _ -> page "txn.html" (result())) 
+0

고맙습니다. 그것은 작동합니다! 거기 미묘한 것 – himekami