当前位置: 首页 > 知识库问答 >
问题:

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

沃弘图
2023-03-14

假设我有以下代码。

function divide(numerator, denominator) {
 return new Promise((resolve, reject) => {

  if(denominator === 0){
   reject("Cannot divide by 0");
   return; //superfluous?
  }

  resolve(numerator / denominator);

 });
}

如果我的目标是使用拒绝提前退出,那么我是否也应该养成之后立即返回ing的习惯?

共有3个答案

周和志
2023-03-14

如果您在解决/拒绝后没有“返回”,那么在您打算让它停止后,可能会发生不好的事情(如页面重定向)。资料来源:我遇到了这个。

龚安民
2023-03-14

一个常见的习惯用法是将返回拒绝结合起来,同时拒绝promise并退出函数,这样包括解析在内的其余函数就不会执行。如果您喜欢这种风格,它可以使您的代码更加紧凑。

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

这工作正常,因为Promise构造函数对任何返回值都不做任何操作,并且在任何情况下解决拒绝都不返回任何值。

同样的习惯用法也可以用于另一个答案中所示的回调样式:

function divide(nom, denom, cb){
  if(denom === 0) return cb(Error("Cannot divide by zero"));
                  ^^^^^^^^^
  cb(null, nom / denom);
} 

同样,这很好,因为调用divide的人不希望它返回任何东西,也不使用返回值做任何事情。

姬朗
2023-03-14

返回的目的是在拒绝后终止函数的执行,并防止在拒绝后执行代码。

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);
  });
}

在这种情况下,它阻止了解析(分子/分母);的执行,这不是严格需要的。然而,最好还是终止执行,以防止将来可能出现的陷阱。此外,防止不必要地运行代码是一个很好的实践。

出身背景

promise可以处于以下三种状态之一:

  1. 挂起-初始状态。从待定我们可以移动到其他状态之一
  2. 完成-手术成功
  3. 拒绝-操作失败

当一个promise被履行或拒绝时,它将无限期地保持这种状态(已解决)。因此,拒绝履行promise或履行被拒绝的promise将无效。

这个示例片段显示,虽然promise在被拒绝后实现了,但它仍然被拒绝。

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));
 类似资料:
  • 问题内容: 假设我有以下代码。 如果我的目的是要早退,那么我是否也应该养成事后立即饮食的习惯? 问题答案: 的目的是拒绝后终止函数的执行,防止代码执行后它。 在这种情况下,它会阻止执行,这不是严格需要的。但是,仍然最好终止执行以防止将来可能出现陷阱。另外,防止不必要地运行代码是一个好习惯。 背景 一个承诺可以处于以下三种状态之一: 待定-初始状态。从待定状态可以移至其他状态之一 完成-成功运作 拒

  • 所以我想知道promise的回应和拒绝对象是怎么回事。我正在阅读这份文档,有些事情我还不清楚。 例如,对象是关于什么的。 我已经看到这个东西可以包含在一个字符串中,然后启动?发生了什么事?这有什么意义 我最初认为只要回调函数返回一个值,解析函数/对象就会启动,然后它就可以转到 所以我在这件事上玩了一段时间,结果证明,我的理论中有50%的时间是有效的,另外50%的时间让我崩溃。 还有拒绝对象/函数,

  • 我在想什么时候我该拒绝一个promise。我发现了几个关于这个话题的问题,但找不到合适的答案。我什么时候应该拒绝promise? 本文http://howtonode.org/6666a4b74d7434144cff717c828be2c3953d46e7/promises 说: 解析:一个成功的promise是“已解析”的,它调用正在等待的成功侦听器,并记住为附加的未来成功侦听器解析的值。分辨率

  • 答案:这个线程的顶部答案基本上回答了我的问题:在一个非void方法编译中缺少return语句。 我想知道为什么不需要在这个方法中返回一个值? 我觉得这样不应该编译。然而,它编译得很好。这在哪里被定义为合法? 在这种情况下,将方法更改为:

  • 最近,我们突然看到以下几个堆栈跟踪。为什么会这样?这是从应用程序尝试将音频评论服务移动到前台时开始的,包括媒体通知和所有内容。

  • 问题内容: 考虑一下这个功能: 有人可以解释一下为什么L1和L2显然无法到达时没有给出警告,而L3却给出了警告。 问题答案: 因为就编译器而言,这只是另一个方法调用。 它所做的是结束过程这一事实只能从实现中找到(这是本机代码,而没有任何区别)。 如果你必须把你的代码(通常也最好避免它,除非你想返回0以外的代码),它应该是一个方法,返回,例如。这样更好。 关于可达性,解释是相同的:是Java语言的关