JavaScript中的 "return await promise" 与 "return promise"

当从异步功能中返回时,您可以等待该承诺得到解决,或者您可以直接返回它:return await promise return promise:

js async function func1() { const promise = asyncOperation(); return await promise; } // vs async function func2() { const promise = asyncOperation(); return promise; }

您很快就会看到这两种表达方式都有效。

但是,当这些表达方式不同时,是否有情况?让我们来看看!

1. 相同行为

为了找到两个表达式(与)的区别,(return await promise vs return promise), 我要使用辅助功能。 delayedDivide(n1, n2).

该函数除以 2 个数字,并返回以承诺包裹的分区结果:

javascript function promisedDivision(n1, n2) { if (n2 === 0) { return Promise.reject(new Error("Cannot divide by 0")); } else { return Promise.resolve(n1 / n2); } }

如果第二个(二维索)论点是,该函数返回拒绝的承诺,因为无法按分除。00

好的,定义帮手功能,让我们划分一些数字。

下列功能使用表达方式,通过包裹在承诺中返回划分: divideWithAwait() uses return await promisedDivision(6, 2)  6 by 2 :

javascript async function divideWithAwait() { return await promisedDivision(6, 2); } async function run() { const result = await divideWithAwait(); console.log(result); // logs 3 } run();

Try the demo.

在函数内,表达式会对部门结果进行评估。都很好run()``await divideWithAwait()``3

现在,让我们尝试使用没有关键字的第二个表达式,并直接返回包装部门结果的承诺:await``return promisedDivision(6, 2)

javascript async function divideWithoutAwait() { return promisedDivision(6, 2); } async function run() { const result = await divideWithoutAwait(); console.log(result); // logs 3 } run();

Try the demo.

即使不使用内部的关键字,功能内的表达仍然正确地评估为! await keyword inside divideWithoutAwait()await divideWithoutAwait()   run()  6 / 2  3!

在此步骤中,您已经看到使用和没有区别 return await promise and return promise 至少在处理成功履行承诺时。

但是,让我们搜索更多!

2. 不同行为

现在,让我们采取另一种方法,特别是尝试与被拒绝的承诺合作。要使功能返回被拒绝的承诺,让我们设置第二个参数。promisedDivision(n1, n2)0

因为现在会返回被拒绝的承诺,让我们也包装到一个 - 看看被拒绝的承诺是否被抓住。promisedDivision(n1, 0)try {... } catch (error) {...}

好的,让我们使用关键字的表达方式:return await promisedDivision(5, 0)await

javascript async function divideWithAwait() { try { return await promisedDivision(5, 0); } catch (error) { // Rejection caught console.log(error); // logs Error('Cannot divide by 0') } } async function run() { const result = await divideWithAwait(); } run();

Try the demo.

因为零分是不可能的,因此返回被拒绝的承诺。成功抓住了被拒绝的承诺抛出。promisedDivision(5, 0)catch(error) { ... }promisedDivision(5, 0)

第二种方法呢?其中省略了哪些方法?await

javascript async function divideWithoutAwait() { try { return promisedDivision(5, 0); } catch (error) { // Rejection NOT caught console.log(error); } } async function run() { const result = await divideWithoutAwait(); } run(); // Uncaught Error: Cannot divide by 0

Try the demo.

然而,这一次没有兑现被拒绝的承诺。catch(error) { ... }

现在,您可以轻松地看到使用和:return await promisereturn promise

当被包裹起来时,附近的渔获物只有在等待承诺时才会被拒绝(这是事实)。try { ... }catch(error) { ... }promisereturn await promise`).

3. 结论

在大多数情况下,特别是如果承诺成功解决,使用和使用之间没有太大的区别。return await promisereturn promise

但是,如果你想抓住拒绝的承诺,你从异步功能返回,那么你绝对应该使用表达和故意添加。return await promiseawait

`catch(error) {...}声明捕获只等待拒绝的承诺在声明中。try {...}

喜欢这个帖子?请分享!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值