第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何等待回調(diào)函數(shù)返回?

如何等待回調(diào)函數(shù)返回?

Go
BIG陽(yáng) 2022-06-13 10:23:53
我有以下代碼:http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {  player.Exec(command, func(response map[string]interface{}){    if response["statusCode"]==float64(0) { // ok      w.Write([]byte(response["statusMessage"].(string)))      player.SendMessage("<b>"+response["statusMessage"].(string)+"</b>")      fmt.Println("playerExec: "+time.Now().Format("20060102150405"))    } else { // failed to process      w.WriteHeader(http.StatusBadRequest) // 400      w.Write([]byte(response["statusMessage"].(string)))      player.SendMessage(response["statusMessage"].(string))    }  })  // Time.Sleep(Time.Seconds*2)  fmt.Println("cmd: "+time.Now().Format("20060102150405"))   })的處理player.Exec()需要一些時(shí)間(因?yàn)樗鼏?dòng)了 WebSocket 連接),所以在一段時(shí)間后調(diào)用回調(diào)函數(shù)(見(jiàn)下面的證明)。太晚了,所以我看到以下錯(cuò)誤:http:來(lái)自 main.main.func1.1 的多余 response.WriteHeader 調(diào)用此外,當(dāng)我在瀏覽器中打開(kāi)“/”頁(yè)面時(shí),我看不到任何內(nèi)容。如果我添加Time.Sleep()到我的代碼中(參見(jiàn)注釋行),那么我會(huì)看到內(nèi)容。Exec() 代碼在這里。日志顯示以下內(nèi)容 -cmd: 20200612192659playerExec: 20200612192659有什么方法可以等待回調(diào)函數(shù)返回嗎?
查看完整描述

2 回答

?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

是的,您可以sync.WaitGroup按如下方式使用:


wg := sync.WaitGroup{}


http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

  wg.Add(1)  // add a waitgroup before calling the async function

  player.Exec(command, func(response map[string]interface{}){

    defer wg.Done()  // release when this function returns

    if response["statusCode"]==float64(0) { // ok

      w.Write([]byte(response["statusMessage"].(string)))

      player.SendMessage("<b>"+response["statusMessage"].(string)+"</b>")

      fmt.Println("playerExec: "+time.Now().Format("20060102150405"))

    } else { // failed to process

      w.WriteHeader(http.StatusBadRequest) // 400

      w.Write([]byte(response["statusMessage"].(string)))

      player.SendMessage(response["statusMessage"].(string))

    }

  })

  wg.Wait()  // this will block until all the resources are released

  fmt.Println("cmd: "+time.Now().Format("20060102150405"))   

})


查看完整回答
反對(duì) 回復(fù) 2022-06-13
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

http:來(lái)自 main.main.func1.1 的多余 response.WriteHeader 調(diào)用


如果您WriteHeader在通過(guò)Write. 這就是為什么 WriteHeader 是額外的或superfluous.


在等待你的 exec 完成時(shí),你可以在你的閉包中使用 waitgroup 。


wg.Wait()將等到您的 exec 回調(diào)返回


http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

  var wg sync.WaitGroup

  wg.Add(1)

  player.Exec(command, func(response map[string]interface{}){

    defer wg.Done()

    if response["statusCode"]==float64(0) { // ok

      w.Write([]byte(response["statusMessage"].(string)))

      player.SendMessage("<b>"+response["statusMessage"].(string)+"</b>")

      fmt.Println("playerExec: "+time.Now().Format("20060102150405"))

    } else { // failed to process

      w.WriteHeader(http.StatusBadRequest) // 400

      w.Write([]byte(response["statusMessage"].(string)))

      player.SendMessage(response["statusMessage"].(string))

    }

  })


  wg.Wait()


  // Time.Sleep(Time.Seconds*2)

  fmt.Println("cmd: "+time.Now().Format("20060102150405"))   

})


查看完整回答
反對(duì) 回復(fù) 2022-06-13
  • 2 回答
  • 0 關(guān)注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)