亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我有一個循環,其條件取決于循環本身調用的函數的布爾值

我有一個循環,其條件取決于循環本身調用的函數的布爾值

慕尼黑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 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號