Promise 带有递归

2023-11-23

我看了一些关于承诺中的递归的问题,并对如何正确实现它们感到困惑:

  • JavaScript 中的递归 Promise
  • AngularJS,承诺具有递归功能
  • 递归链接 Promise
  • Javascript 递归 Promise

我整理了一个简单的例子(见下文)——这只是一个例子,这样我就可以理解如何使用 Promise 进行递归,而不是我正在工作的代码的表示。

Net-net,我希望承诺能够解决,但根据节点上的输出,它无法解决。对如何做出这个决心有任何见解吗?

var i = 0;

var countToTen = function() { 
    return new Promise(function(resolve, reject) {
        if (i < 10) {
            i++;
            console.log("i is now: " + i);
            return countToTen();
        }
        else {
            resolve(i);
        }
    });
}

countToTen().then(console.log("i ended up at: " + i));

以及控制台上的输出:

> countToTen().then(console.log("i ended up at: " + i));
i is now: 1
i is now: 2
i is now: 3
i is now: 4
i is now: 5
i is now: 6
i is now: 7
i is now: 8
i is now: 9
i is now: 10
i ended up at: 10
Promise { <pending> }

承诺永远不会兑现。


如果你看看你的代码只要i小于 10 你正在递归并且从未兑现承诺。你最终兑现了一个承诺。但这并不是最初调用者得到的承诺。

您需要使用递归返回的承诺来解决。如果您使用 Promise 进行解析,系统将如何工作,直到该值也得到解析后,系统仍然无法解析:

let i = 0;
const countToTen = () => new Promise((resolve, reject) => {
    if (i < 10) {
      i++;
      console.log("i is now: " + i);
      resolve(countToTen());
    } else {
      resolve(i);
    }
  });

countToTen().then(() => console.log("i ended up at: " + i));

最后一部分也有错误。你没有提供一个函数then所以如果你做了一些实际上会等待的事情,你就会得到"i ended up at: 0" first.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Promise 带有递归 的相关文章

随机推荐

  • 如何在Java中执行无符号到有符号的转换?

    假设我从输入设备读取了这些字节 6F D4 06 40 该数字是毫弧秒格式的经度读数 最高位 0x80000000 基本上始终为零 并且在本问题中被忽略 我可以轻松地将字节转换为unsigned整数 1876166208 但是如何将该无符号
  • 作为好友的模板参数

    在 C 03 中 以下内容是非法的 尽管某些编译器支持它 template
  • 如何判断给定的URL链接是视频还是图片?

    我正在尝试获取用户输入的给定 URL 并确定该 URL 是否指向图像或视频 示例用例 当用户粘贴 YouTube 视频的 URL 时 保存时页面将自动显示嵌入式 YouTube 播放器 当用户在 Flickr 中发布图片的 URL 时 在保
  • 从服务器获取数据后如何将数据存储在房间数据库中

    我在我的 android 应用程序中使用 Retrofit2 和 Rxjava2 作为网络库 使用 NodeJS 和 MongoDB 作为后端服务 我想从服务器获取数据并将数据存储在房间数据库中 以便用户再次打开应用程序时它会从房间获取数据
  • 模型视图投影矩阵的用途

    我们使用模型视图投影矩阵的目的是什么 为什么着色器需要模型视图投影矩阵 模型 视图和投影矩阵是三个独立的矩阵 模型从对象的局部坐标空间映射到世界空间 从世界空间到相机空间的视图 从相机到屏幕的投影 如果您组合了所有三个 则可以使用一个结果从
  • wait((int *)0) 的含义

    一个使用这样的等待函数的程序是 include
  • android Zoom-to-Fit All Markers on Google Map v2 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何放大 缩小地图视图以覆盖所有标记 我正在审查 sdk 中给出的 gmap V2 示例
  • 如何配置分页codeigniter?

    我尝试使用CodeIgniter进行分页 根据Codeigniter的手册 它应该很简单 即使在示例中是这样的 第一个 最后一个 config total rows this gt searchdesc model gt queryallr
  • 调用SKPaymentQueue RestoreCompletedTransactions,无响应

    这里的用例是用户从未购买过我的应用内购买 但点击了 恢复 按钮 我想让用户知道恢复失败 因为没有什么可恢复的 问题是我没有收到任何事件 所以我不知道发生了什么 当我的用户点击界面中的 恢复 按钮时 我调用 SKPaymentQueue de
  • 使用 json 填充下拉列表

    我有包含 id 和 name 列的 SQLite 表 我从 autocomplete php 页面返回这些行的数组 例如 json 如何使用 jquery 和 JavaScript 使用此 json 填充选项 下拉列表 我是 JavaScr
  • 如何解决构建过程中 Android 库自定义属性和包名称重新映射?

    随着时间的推移 我们的 Android 项目已经扩展了很多 现在我们正在从同一源代码树创建多个品牌 APK 由于 Android 的包命名要求 这变得具有挑战性 我们将所有共享代码都放在 Android 库项目中 该项目包含在主应用程序项目
  • 替换 numpy 中的子数组

    给定一个数组 gt gt gt n 2 gt gt gt a numpy array 1 1 1 1 2 3 1 3 4 n gt gt gt a array 1 1 1 1 2 3 1 3 4 1 1 1 1 2 3 1 3 4 我知道可
  • 将 System.Net.mail.MailMessage 保存为 .msg 文件

    我正在构建一个应用程序 我有义务创建一个 MailMessage System Net mail MailMessage 并将其保存在磁盘上作为 msg 扩展名而不是 eml 以下是我用来将 MailMessage 保存为 msg 文件的方
  • Paypal Sandbox 付款状态待定

    我正在使用 Java Rest API 直接从沙箱中的信用卡执行付款 根据文档 所有付款均处于 待处理 状态 https developer paypal com webapps developer docs api create a pa
  • 递归转换目录和子目录中所有文件的所有EOL(dos->unix),无需dos2unix

    如何递归地转换目录和子目录中所有文件的所有 EOL dos gt unix without dos2unix 我没有 无法安装 有没有办法使用tr d r 和管道 如果是这样 怎么办 对于当前目录中的所有文件 您可以使用 Perl 一行代码
  • 如何修复“警告预期“此”将由类方法使用”eslint 错误?

    我正在 React 组件中创建这样的 PDF 导出类 Test 扩展 React PureComponent savePDF const source document getElementById printContainer eslin
  • 这是使用 redux 删除项目的正确方法吗?

    我知道我不应该改变输入 而应该克隆对象来改变它 我遵循 redux 启动项目中使用的约定 该项目使用 ADD ITEM state action gt state items state items action payload value
  • dlopen 对于同一文件的两次调用会产生相同的句柄吗?

    如果我在同一个应用程序运行中对同一个库 文件使用 dlopen 两次 在这两种情况下它会产生相同的句柄吗 对此有任何保证吗 一个简短的实验表明它至少在我的盒子上如此 我目前正在玩一个小插件系统 出于好奇 如果对这种观察到的行为有某种保证 我
  • 如何使用 mplot3D 或类似工具显示 3D 阵列等值面的 3D 图

    我有一个 3 维 numpy 数组 我想 在 matplotlib 中 显示该数组的等值面的漂亮 3D 图 或更严格地说 显示通过在样本点之间插值定义的 3D 标量场的等值面 matplotlib 的 mplot3D 部分提供了很好的 3D
  • Promise 带有递归

    我看了一些关于承诺中的递归的问题 并对如何正确实现它们感到困惑 JavaScript 中的递归 Promise AngularJS 承诺具有递归功能 递归链接 Promise Javascript 递归 Promise 我整理了一个简单的例