使用 Q Promise 进行串行执行

2024-03-05

我想我误解了如何Q https://github.com/kriskowal/q承诺工作。我希望我的第一个承诺在下一个承诺开始之前得到解决,但这并没有发生。这是我的代码:

var Q = require('q');

function doWork(taskName) {
  var deferred = Q.defer();
  console.log('starting', taskName);
  setTimeout(function() { 
    console.log('done with', taskName);
    deferred.resolve(); 
  });

  return deferred.promise;
}

doWork('task one')
  .then(doWork('task two'))
  .then(function() { console.log('all done'); });

该代码产生:

$ node test.js 
  starting task one
  starting task two
  done with task one
  done with task two
  all done

我希望它能产生:

$ node test.js 
  starting task one
  done with task one
  starting task two
  done with task two
  all done

我究竟做错了什么?


这有效:

doWork('task one')
  .then(function() {
    return doWork('task two')
  })
  .then(function() {
    console.log('all done'); 
  });

这是有道理的 - 只是打电话doWork直接在then()将立即触发超时,而不是给 Q 机会等待task one做完了。

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

使用 Q Promise 进行串行执行 的相关文章

随机推荐

  • 如何使用 matplotlib 在 python 中绘制 3D 密度图

    我有一个 x y z 蛋白质位置的大型数据集 并且想将高占用率区域绘制为热图 理想情况下 输出应该类似于下面的体积可视化 但我不确定如何使用 matplotlib 实现这一点 我最初的想法是将我的位置显示为 3D 散点图 并通过 KDE 对
  • 让 Flex 容器采用内容的宽度,而不是宽度 100%

    在下面的示例中 我有一个具有以下样式的按钮 button flexbox approach other button styles display flex justify content center align items center
  • 如何使用 Windows api 更改时区设置

    我需要在我的应用程序中通过 API 更改 DST 和时区 我在以下链接末尾修改并复制了 GetTimeZoneInformation 用法的示例并运行了它 http msdn microsoft com en us library wind
  • 来自 gstatic 的 PhantomJS JavaScript 错误,但浏览器中没有错误

    我最近通过 PhantomJS 测试套件运行我们的网站 遇到了无法在浏览器中手动重现的 JavaScript 错误 这些错误是在 Google 地图 api 中发现的 Capybara 返回的文本如下 TypeError Unable to
  • 如何连接多个queryDSL表

    我有一些表 我想使用 queryDSL 连接获取结果 但没有找到任何使用 queryDSL 进行多个连接的示例 我有这些表 账户表 accountId PK 电子邮件 密码 account profile 表 accountId PK fk
  • 为什么我可以在模式匹配中将 :: 运算符与 Seq 一起使用,但在其他地方却不能

    所以我对 Scala 中 Seq 的这种行为感到非常困惑 使用模式匹配时 我可以使用 or 运算符 它们似乎可以互换 val s Seq 1 2 3 s match case x l gt 但是当我尝试使用时 在不同的情况下像这样 val
  • 如何使用 dnotify /inotify 命令持续监控目录

    我是 dnotify inotify 命令的新手 任何人都可以帮助我如何编写一个脚本 以便它持续监视目录并指示它有一些更改或修改 Inotify 本身是一个内核模块 可以通过调用来访问 例如一个 C 程序 https linux die n
  • 更新 AWS S3 对象密钥(密钥名称)

    我需要重命名 AWS S3 存储桶中存储的大量文件 每个文件 对象将单独重命名 基于特定标准 没有通用的 前缀 后缀 我想出了 current filename 和 new filename 的列表 它们可以作为 bat 文件 队列在 CL
  • 与 ANT 模式语法的混淆和可能的变化

    我正在开发 ANT 模式解析器 作为大型服务器项目的一部分 这篇文章的答案中有一些很好的 ANT 模式示例 如何使用 Nant Ant 命名模式 https stackoverflow com questions 69835 how do
  • Android 12 - 致命异常:android.content.res.Resources$NotFoundException

    我在 Android 12 设备上收到以下错误 Fatal Exception android content res Resources NotFoundException Resource ID 0x20c0025 at android
  • 将成员对象的引用添加到指针数组

    我有一个类 其中包含一些包含对象的私有成员和一个动态指针数组 我想用指向其中一些成员对象的指针填充该数组 class NextionTest public NextionDisplay private NexText lblText Nex
  • Sequelize 和 Postgres 按距点的距离排序

    我在搜索时遇到问题 包括按距某个点的距离排序 这是我的代码以及我正在尝试做的事情 感谢帮助 const Sequelize require sequelize var Flat db define flat id type Sequeliz
  • React 中的事件驱动方法?

    我想在一个组件中 触发一个事件 并让其他组件 订阅 该事件并在 React 中执行一些工作 例如 这是一个典型的 React 项目 我有一个模型 从服务器获取数据 并使用该数据呈现多个组件 interface Model id number
  • Android,在网络共享和连接到接入点时检测 WiFi 的本地 IP 和子网掩码

    我需要检测本地IP地址和子网掩码在 WiFi 网络上 在 Android 设备上 为了严格计算本地子网的 UDP 广播地址 当设备连接到接入点时 以下功能正常工作 Only works when NOT tethering WifiMana
  • Nuxt不会自动从嵌套目录导入组件

    在我的 nuxt 应用程序中 嵌套目录中的组件不会按预期自动导入 对于我的一些组件 我有如下内容 vue 2 6 12 nuxt 2 15 0 components 目录结构 TopArea SomeComponent vue
  • WPF 用户控件而非数据绑定

    在我的用户控件中 我有一个不是数据绑定的依赖属性 我查看了几篇堆栈溢出帖子 但我无法弄清楚我做错了什么 永远不会调用属性更改方法 到目前为止我的代码 我的用户控件基本上是一个增强的组合框 DP 位于用户控件内部 我正在数据网格内使用此用户控
  • 如何使用python将一幅图像的相位和不同图像的幅度组合成一幅图像

    我想将一幅图像的相位谱和不同图像的幅度谱组合成一幅图像 我得到了图像A和图像B的相位谱和幅度谱 这是代码 f np fft fft2 grayA fshift1 np fft fftshift f phase spectrumA np an
  • 数据库设计 - 一个表中的列引用两个表

    这是我所拥有的一个示例 以 Stack Overflow 为例 我有2张桌子 Questions and Answers 我也有一个Comments桌子 评论表将引用问题和答案 我应该如何设置数据库 评论中有 2 列 即 QuestionI
  • HTTP 响应中标头的顺序重要吗?

    标题的顺序是否有意义 A 1 B 2 vs B 2 A 1 我试图弄清楚是否可以使用字典来存储标题列表 或者它是否需要是某种列表或有序字典 不 具有不同名称的标头并不重要 看RFC 2616 https www rfc editor org
  • 使用 Q Promise 进行串行执行

    我想我误解了如何Q https github com kriskowal q承诺工作 我希望我的第一个承诺在下一个承诺开始之前得到解决 但这并没有发生 这是我的代码 var Q require q function doWork taskN