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

是否应该将函数包装为异步

是否应该将函数包装为异步

白板的微信 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 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号