Web_Design 板


LINE

各位好 小弟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://webptt.com/cn.aspx?n=bbs/Web_Design/M.1529398136.A.1A9.html
1F:推 eight0: 环境是 Node.js 的话可以试试 child_process.execSync06/19 18:53
是在浏览器下的纯js喔 ※ 编辑: awpadam (223.140.179.151), 06/19/2018 18:59:49
2F:推 Kenqr: await?06/19 19:00
因为用特殊浏览器的关系,我们的环境只支援ES6,没有支援await ※ 编辑: awpadam (223.140.179.151), 06/19/2018 19:06:52
3F:推 sa0124: 哇 这个好难 用settimeout把同步包装成非同步 让下一个非06/19 19:07
4F:→ sa0124: 同步接参数呢? 06/19 19:07
5F:→ sa0124: (这做法很烂 看有没有更好的做法)06/19 19:07
其实我主管的诉求就是:把 //对service的接续流程 这个部分包成函式太麻烦了,因为里面有各式各样的code 也有非同步的code 所以才想说把getService 这个函式想办法模拟成同步的,是最好的办法 所以你的办法可能对我就不适用了~ ※ 编辑: awpadam (123.193.141.167), 06/19/2018 19:46:21
6F:推 davidsky: 用await 然後用babel编译成ES6/5, 不过这样还是得改code06/19 20:16
请问这样的话,我们的浏览器不支援await,还是会work吗?它会自己用对应的语法吗? ※ 编辑: awpadam (123.193.141.167), 06/19/2018 20:33:41
7F:推 mmis1000: babel 最低能 target es3,await什麽的会帮你全转掉06/19 21:22
8F:推 shter: 用 while 等到有值会报无限回圈当掉吗?06/19 21:51
主管是有提过可不可以用无限回圈模拟,但是我觉得这样好像很吃资源,所以上来问版友 ※ 编辑: awpadam (123.193.141.167), 06/19/2018 22:01:24
9F:推 mmis1000: 在js用dead loop等值,你等到往生都等不到 06/19 22:01
好像是欸,因为是单执行绪的,会卡死在while ※ 编辑: awpadam (123.193.141.167), 06/19/2018 22:02:58
10F:→ mmis1000: 基於 Event Loop 的语言,你用 dead loop 就是自杀 06/19 22:02
11F:推 sa0124: 哦哦 懂你意思了 那就是用await了 但我印象中我只装babel06/19 23:26
12F:→ sa0124: 好像没跑成功,还要再装额外的polyfill才行06/19 23:26
13F:→ superpai: 就算用了 await,你还是要在该加async的地方加async06/20 05:28
14F:→ superpai: 你逃不了改写的。 06/20 05:28
有点惨,谢谢大家提供的意见,谢谢 ※ 编辑: awpadam (223.140.44.185), 06/20/2018 08:34:09
15F:推 steven11329: es6 generator 06/23 14:40
16F:→ steven11329: https://github.com/tj/co 给你参考 06/23 14:41







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP