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

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

是否應該將函數包裝為異步

是否應該將函數包裝為異步

白板的微信 2022-07-21 22:12:06
我正在處理一些代碼庫,async在這種情況下,我和一位同事討論了是否將其放在函數名之前。我會說是的,因為我們里面有一個 Promise,但這里可能是錯誤的。有什么建議嗎?return {    **async ???** loadSmthForFilter: function (diseases) {      return new Promise((resolve, reject) => {        $.get('/api/bla', { diseases })          .done(resolve)          .fail(reject);      });    }
查看完整描述

3 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

你可以,但你不需要。這取決于您是要使用await運算符(添加async關鍵字)還是使用then函數鏈接(無需添加它)。


如果你選擇你把它放在錯誤的地方


return {

  loadSmthForFilter: async function (diseases) {

   return new Promise((resolve, reject) => {

    $.get('/api/bla', { diseases })

      .done(resolve)

      .fail(reject);

   });

}

順便說一句,您應該直接返回$.get,因為這是一個承諾,無需將其包裝在另一個承諾中。


查看完整回答
反對 回復 2022-07-21
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

您不需要將此功能與 async 一起使用。該函數返回一個 Promise 但不等待一個。但是,我通常將 async 用于返回承諾以等待輸出的函數。



查看完整回答
反對 回復 2022-07-21
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

該async關鍵字在需要時非常有用,但它給函數調用增加了一些額外的開銷,因為它在函數體內部包裹了一個 try/catch,它以不同的方式處理返回值并創建了一個 Promise。


所以,我async只在需要時使用,那是我想await在函數內部使用的時候,或者非常偶爾,當我想利用自動 try/catch 包裝并且我正在使用某種異步操作時。


在您的情況下,這些情況似乎都不適用,因此我將刪除承諾反模式(手動將承諾包裝在另一個中),返回$.get()已經返回的承諾并執行以下操作:


return {

    loadSmthForFilter: function (diseases) {

        return $.get('/api/bla', { diseases });

    }

};


查看完整回答
反對 回復 2022-07-21
  • 3 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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