为了账号安全,请及时绑定邮箱和手机立即绑定

我有一个循环,其条件取决于循环本身调用的函数的布尔值

我有一个循环,其条件取决于循环本身调用的函数的布尔值

慕尼黑5688855 2023-07-20 14:56:30
(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个赞

虽然此代码可能有效,但存在一些问题:

  1. 你的竞争条件有问题。假设 X 在检查时可用checkAvailable,但在此代码转到 之前orderProduct,X 不再可用,因为其他某个客户端订购了可用的 X。那么,orderProduct就会失败。您似乎想要循环播放直到产品可用。

  2. 该代码将永远等待产品可用。如果那永远不会发生怎么办?暂停是个好主意。

  3. 代码无情地敲击另一端,不断询问“它可用吗?” “是可用的么?” “是可用的么?” (就像一个小孩问“我们到了吗?”:-))。它至少应该等待一段时间,通常在某个时候(再次)放弃之前以更大的步幅后退。

相反,将orderProduct订单发送到服务器(或数据库或其他),并让系统的部分自动订购产品 - 如果失败,请说明失败是因为产品不可用还是其他原因,所以该代码知道是否重试。如果服务器的结果是“不可用”,请稍等一下(使用逐渐增大的后退逻辑),然后再次尝试下订单;并添加超时。


查看完整回答
反对 回复 2023-07-20
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信