[問題] 把非同步模擬成同步的問題
各位好
小弟js寫沒多久,目前碰到一個難題,希望大家不吝指教
是這樣的,目前我們的js有個常用的function原本是 同步的
現在因為某些原因變成非同步的
舉例如下
假設這個常用的function是這樣
function getService(){
// 同步敘述 跟底層的c api 取得一些資源,並回傳回來
result = c_api();
return result ;
}
而現在底層的c api 做了一些大改版,導致變成非同步的模式
類似變成
function getService( callback ){
// 非同步 要把callback帶給底層的c api ,底層c api 取得資源後,會把資料
用
格式帶給callback
c_api( callback );
}
我們原本流程的code可能長這樣
xxxx
var service = getService()
//對service的接續流程
現在卻要改寫成
function get_json( json ){
var service = parse_json_value( json );
//對service的接續流程
}
xxxx
getService( get_json ) ;
由於我們很多地方都用到getService這個function
如果全都改寫成callback的方式會花大量的時間
所以主管就說找找看有沒有什麼可以在js這邊把非同步模擬成同步的方法 (底層 c 貌似
已經無法弄成同步的了)
這樣轉一層之後,原本的流程架構就可以不用改
我google找到 promise 這個語法,不過初步看起來,他是用來處理許多非同步和非同步
流程 的方法 (避免非同步的callback地獄)
好像不是像我需要的 在同步和非同步之間,直接把非同步模擬成同步的
請問像我需要的這種功能,應該從什麼方向著手呢?
我好像敘述的有點亂,如果看不懂的話我可以再補充,先謝謝各位大大了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.7.85
※ 文章網址: https://www.ptt.cc/bbs/Web_Design/M.1529398136.A.1A9.html
推
06/19 18:53,
7年前
, 1F
06/19 18:53, 1F
是在瀏覽器下的純js喔
※ 編輯: awpadam (223.140.179.151), 06/19/2018 18:59:49
推
06/19 19:00,
7年前
, 2F
06/19 19:00, 2F
因為用特殊瀏覽器的關係,我們的環境只支援ES6,沒有支援await
※ 編輯: awpadam (223.140.179.151), 06/19/2018 19:06:52
推
06/19 19:07,
7年前
, 3F
06/19 19:07, 3F
→
06/19 19:07,
7年前
, 4F
06/19 19:07, 4F
→
06/19 19:07,
7年前
, 5F
06/19 19:07, 5F
其實我主管的訴求就是:把 //對service的接續流程
這個部分包成函式太麻煩了,因為裡面有各式各樣的code
也有非同步的code
所以才想說把getService 這個函式想辦法模擬成同步的,是最好的辦法
所以你的辦法可能對我就不適用了~
※ 編輯: awpadam (123.193.141.167), 06/19/2018 19:46:21
推
06/19 20:16,
7年前
, 6F
06/19 20:16, 6F
請問這樣的話,我們的瀏覽器不支援await,還是會work嗎?它會自己用對應的語法嗎?
※ 編輯: awpadam (123.193.141.167), 06/19/2018 20:33:41
推
06/19 21:22,
7年前
, 7F
06/19 21:22, 7F
推
06/19 21:51,
7年前
, 8F
06/19 21:51, 8F
主管是有提過可不可以用無限迴圈模擬,但是我覺得這樣好像很吃資源,所以上來問版友
※ 編輯: awpadam (123.193.141.167), 06/19/2018 22:01:24
推
06/19 22:01,
7年前
, 9F
06/19 22:01, 9F
好像是欸,因為是單執行緒的,會卡死在while
※ 編輯: awpadam (123.193.141.167), 06/19/2018 22:02:58
→
06/19 22:02,
7年前
, 10F
06/19 22:02, 10F
推
06/19 23:26,
7年前
, 11F
06/19 23:26, 11F
→
06/19 23:26,
7年前
, 12F
06/19 23:26, 12F
→
06/20 05:28,
7年前
, 13F
06/20 05:28, 13F
→
06/20 05:28,
7年前
, 14F
06/20 05:28, 14F
有點慘,謝謝大家提供的意見,謝謝
※ 編輯: awpadam (223.140.44.185), 06/20/2018 08:34:09
推
06/23 14:40,
7年前
, 15F
06/23 14:40, 15F
→
06/23 14:41,
7年前
, 16F
06/23 14:41, 16F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
9
16
Web_Design 近期熱門文章
PTT數位生活區 即時熱門文章