栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

需要在提前解决/拒绝后返回吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

需要在提前解决/拒绝后返回吗?

return
目的是拒绝后终止函数的执行,防止代码执行后它。

function divide(numerator, denominator) {  return new Promise((resolve, reject) => {    if (denominator === 0) {      reject("Cannot divide by 0");      return; // The function execution ends here     }    resolve(numerator / denominator);  });}

在这种情况下,它会阻止

resolve(numerator /denominator);
执行,这不是严格需要的。但是,仍然最好终止执行以防止将来可能出现陷阱。另外,防止不必要地运行代码是一个好习惯。

背景

一个承诺可以处于以下三种状态之一:

  1. 待定-初始状态。从待定状态可以移至其他状态之一
  2. 完成-成功运作
  3. 拒绝-操作失败

当一个诺言被兑现或被拒绝时,它会无限期地保持这种状态(结算)。因此,拒绝履行承诺或履行拒绝承诺将不会产生效果。

此示例代码片段显示,尽管诺言在被拒绝后就已实现,但它仍然被拒绝。

function divide(numerator, denominator) {  return new Promise((resolve, reject) => {    if (denominator === 0) {      reject("Cannot divide by 0");    }    resolve(numerator / denominator);  });}divide(5,0)  .then((result) => console.log('result: ', result))  .catch((error) => console.log('error: ', error));

那么,为什么我们需要返回?

尽管我们无法更改已结算的承诺状态,但拒绝或解决不会停止其余功能的执行。该函数可能包含会产生混乱结果的代码。例如:

function divide(numerator, denominator) {  return new Promise((resolve, reject) => {    if (denominator === 0) {      reject("Cannot divide by 0");    }    console.log('operation succeeded');    resolve(numerator / denominator);  });}divide(5, 0)  .then((result) => console.log('result: ', result))  .catch((error) => console.log('error: ', error));

即使函数现在不包含此类代码,这也会造成将来的陷阱。将来的重构可能会忽略以下事实:承诺被拒绝后,代码仍在执行,并且将很难调试。

解析/拒绝后停止执行:

这是标准的JS控制流程内容。

  • resolve
    / 之后返回
    reject

    function divide(numerator, denominator) {

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

    if (denominator === 0) {  reject("Cannot divide by 0");  return;}console.log('operation succeeded');resolve(numerator / denominator);

    });

    }

    divide(5, 0)

    .then((result) => console.log(‘result: ‘, result))

    .catch((error) => console.log(‘error: ‘, error));

  • resolve
    / 返回
    reject
    -由于忽略了回调的返回值,我们可以通过返回reject / resolve语句保存一行:

    function divide(numerator, denominator) {

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

    if (denominator === 0) {  return reject("Cannot divide by 0");}console.log('operation succeeded');resolve(numerator / denominator);

    });

    }

    divide(5, 0)

    .then((result) => console.log(‘result: ‘, result))

    .catch((error) => console.log(‘error: ‘, error));

  • 使用if / else块:

    function divide(numerator, denominator) {

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

    if (denominator === 0) {  reject("Cannot divide by 0");} else {  console.log('operation succeeded');  resolve(numerator / denominator);}

    });

    }

    divide(5, 0)

    .then((result) => console.log(‘result: ‘, result))

    .catch((error) => console.log(‘error: ‘, error));

我更喜欢使用其中一个

return
选项,因为代码比较扁平。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号