PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
Ajax
[问题] 如何确保底层的处理顺序?
楼主:
LaPass
(LaPass)
2017-01-23 14:59:16
范例
http://pastebin.com/hz39fQWC
期望的状况是,写入档案的内容是
0,1,2,3,4.....,999,
但实际上,档案的内容可能会变成这样:
....8,9,11,10,12....
也就是说,呼叫 fs.appendFile() 的顺序
并不代表底层实际上处理的顺序。
可能会有人回答:
用 fs.appendFileSync 或是 把字串黏好之后再写到档案
但我想问的不是这个
我贴出来的只是一个简单的范例
这种底层处理顺序问题
可能出现在,数据库、socket等等,任何由底层去处理的异步动作上
只要底层实作时,不管顺序问题
就可能遇到这种状况
请问有什么方式可以保证底层异步行为的处理顺序问题?
作者:
jmlntw
(吉米林)
2017-01-23 15:11:00
Promise
楼主:
LaPass
(LaPass)
2017-01-23 15:56:00
也就是说只能自己处理好顺序问题,然后用Promise去叫处理动作这样吗?
作者:
jmlntw
(吉米林)
2017-01-23 16:41:00
例如这样:
http://pastebin.com/ZyL6x4xJ
当然如果能用 async 或 bluebird 之类的套件就能更简洁了
楼主:
LaPass
(LaPass)
2017-01-23 16:49:00
了解,感谢。
作者:
visa9527
(高级伴读士官长)
2017-01-23 17:40:00
要确保顺序就是要一个完成后 callback 回来再跑下一个
作者:
dododavid006
(朔雪)
2017-01-23 17:44:00
jmlntw 的范例还是不保证顺序吧 Promise 一建立就开始执行了 一开始就全部建好的话是不保证执行顺序的
作者:
Kenqr
(function(){})()
2017-01-23 18:00:00
j大的code没问题吧 6~13行的函数宣告不会执行内容
作者:
s25g5d4
(function(){})()
2017-01-23 18:00:00
把你要执行的动作包成 function 推进 array 里面然后 function 执行后回传一个 Promise
作者:
s25g5d4
(function(){})()
2017-01-23 18:01:00
对 array 里面的 function 依序执行并等 Promise 结束
https://github.com/azproduction/promise-queue
作者:
dododavid006
(朔雪)
2017-01-23 20:16:00
对耶 我没看清楚 不好意思 眼残以为在 17 行执行了
作者:
mrbigmouth
(大嘴先生)
2017-01-24 13:19:00
只要是async的东西就是不能确保顺序 写js这是死观念要确保顺序就是另外加手序去确保
作者: TETZ (你今天宅了吗?)
2017-01-26 02:20:00
之前写gulp task时是用recursive跑完一个task再跑下一个
http://pastebin.com/SD2SNT2E
大概4这样而且我本来以为会比async慢但算了时间居然比较快耶
作者:
mmis1000
(秋月恋枫)
2017-01-26 21:23:00
这种时候,你应该直接 fs.createWriteStream()然后剩下的让node帮你做手动处里应该是只有node本身没有这种机制时才用
楼主:
LaPass
(LaPass)
2017-02-15 10:33:00
我知道你的意思。我这只是举例用fs来表示而已,这可以用在所有底层异步的问题上
作者:
mmis1000
(秋月恋枫)
2017-02-17 20:33:00
然后所谓async,本来就只保证工作结束会通知吧?无论是失败或成功,顺序之类打从一开始就不再考虑范围
继续阅读
[问题] datepicker会被重置之问题
hungwei0331
[心得] Javascript的继承陷并
danceofdie
[问题] fullcalendar中eventRender处理background events
lhsieh
[问题] 请益一个eslint的问题
mathtku
[问题] 模拟Post登入
gn301046
[问题] 请问可以动态宣告Function吗?
sivle01
Fw: [问题] 用 http client 抓弹出视窗可行吗?
Neisseria
[问题] google map url
NYSM
[问题] 大家如何找出和某节点有关的js?
ajaxbaby
[ js ] 两个物件都mouseout才执行的事件
hirabbitt
Links
booklink
Contact Us: admin [ a t ] ucptt.com