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

(async function() {

  try {

    let notAvailible = true;

    while (notAvailible) notAvailible = await checkAvailible();

    if (!notAvailible) orderProduct();

  } catch (err) {

    console.error(err);

  }

})();

while 循环会运行直到条件 notAvailible 为 false,然后运行函数 orderProduct() 吗?或者会发生一些不想要的事情吗?


慕尼黑5688855
浏览 90回答 1
1回答

jeck猫

虽然此代码可能有效,但存在一些问题:你的竞争条件有问题。假设 X 在检查时可用checkAvailable,但在此代码转到 之前orderProduct,X 不再可用,因为其他某个客户端订购了可用的 X。那么,orderProduct就会失败。您似乎想要循环播放直到产品可用。该代码将永远等待产品可用。如果那永远不会发生怎么办?暂停是个好主意。代码无情地敲击另一端,不断询问“它可用吗?” “是可用的么?” “是可用的么?” (就像一个小孩问“我们到了吗?”:-))。它至少应该等待一段时间,通常在某个时候(再次)放弃之前以更大的步幅后退。相反,将orderProduct订单发送到服务器(或数据库或其他),并让系统的该部分自动订购产品 - 如果失败,请说明失败是因为产品不可用还是其他原因,所以该代码知道是否重试。如果服务器的结果是“不可用”,请稍等一下(使用逐渐增大的后退逻辑),然后再次尝试下订单;并添加超时。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript