[問題] 非同步觀念釐清

看板MacDev作者 (泥好嗎)時間6年前 (2019/01/31 10:12), 編輯推噓5(5012)
留言17則, 7人參與, 6年前最新討論串1/1
當我使用非同步的方法去取得資料時 為什麼需要用completion去做處理? 有去查了一下 但只說因為是非同步所以要用completion 我還是不太清楚這兩者之間的關係 求大大開釋 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.28.202.94 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1548900773.A.443.html

01/31 11:17, 6年前 , 1F
不知道什麼時候得到回應,又要在回應之後做
01/31 11:17, 1F

01/31 11:20, 6年前 , 2F
正常code的順序是同步的時候,而非同步的時候是不會等待
01/31 11:20, 2F

01/31 11:20, 6年前 , 3F
結果到了才接著下一行,而是先往下一行跑,等結果回來後再
01/31 11:20, 3F

01/31 11:20, 6年前 , 4F
處理
01/31 11:20, 4F

01/31 11:24, 6年前 , 5F
這要從Swift來看會比較快理解,Swift的閉包等同於method,
01/31 11:24, 5F

01/31 11:24, 6年前 , 6F
所以你可以當completion是一個特殊的method,是用來處理非
01/31 11:24, 6F

01/31 11:24, 6年前 , 7F
同步呼叫用的
01/31 11:24, 7F

01/31 11:38, 6年前 , 8F
我把completion放進非同步方法的scope中處理回傳的資
01/31 11:38, 8F

01/31 11:38, 6年前 , 9F
料,執行的順序變成上到下,所以資料才能傳入completio
01/31 11:38, 9F

01/31 11:38, 6年前 , 10F
n中,這樣的觀念是對的嗎?
01/31 11:38, 10F

01/31 23:08, 6年前 , 11F
想像一下你想要泡茶, 泡茶前要先燒開水; 但如果你一直等著
01/31 23:08, 11F

01/31 23:10, 6年前 , 12F
水燒開,其他事就不用做了; 所以你去買一個氣笛水壺, 水燒
01/31 23:10, 12F

01/31 23:10, 6年前 , 13F
開就自動通知你回來泡茶. 在這段時間你就可以做別的事.
01/31 23:10, 13F

01/31 23:11, 6年前 , 14F
completion,或者是callback, 就像是氣笛的角色.
01/31 23:11, 14F

02/01 14:24, 6年前 , 15F
把completion內跟其他部分都print出來 就知道了
02/01 14:24, 15F

02/01 14:25, 6年前 , 16F
推樓上
02/01 14:25, 16F

03/22 17:08, 6年前 , 17F
建議你嘗試用gcd寫一個非同步的程式
03/22 17:08, 17F
文章代碼(AID): #1SKbcbH3 (MacDev)
文章代碼(AID): #1SKbcbH3 (MacDev)