(async function() { try { let notAvailible = true; while (notAvailible) notAvailible = await checkAvailible(); if (!notAvailible) orderProduct(); } catch (err) { console.error(err); }})();while 循环会运行直到条件 notAvailible 为 false,然后运行函数 orderProduct() 吗?或者会发生一些不想要的事情吗?
1 回答
jeck猫
TA贡献1909条经验 获得超7个赞
虽然此代码可能有效,但存在一些问题:
你的竞争条件有问题。假设 X 在检查时可用
checkAvailable
,但在此代码转到 之前orderProduct
,X 不再可用,因为其他某个客户端订购了可用的 X。那么,orderProduct
就会失败。您似乎想要循环播放直到产品可用。该代码将永远等待产品可用。如果那永远不会发生怎么办?暂停是个好主意。
代码无情地敲击另一端,不断询问“它可用吗?” “是可用的么?” “是可用的么?” (就像一个小孩问“我们到了吗?”:-))。它至少应该等待一段时间,通常在某个时候(再次)放弃之前以更大的步幅后退。
相反,将orderProduct
订单发送到服务器(或数据库或其他),并让系统的该部分自动订购产品 - 如果失败,请说明失败是因为产品不可用还是其他原因,所以该代码知道是否重试。如果服务器的结果是“不可用”,请稍等一下(使用逐渐增大的后退逻辑),然后再次尝试下订单;并添加超时。
添加回答
举报
0/150
提交
取消