【问题标题】:Nesting promises with q-io使用 q-io 嵌套 promise
【发布时间】:2013-12-09 14:14:52
【问题描述】:

我试图理解返回另一个承诺的承诺成为回报的价值的想法。这就是我在 wiki 上的 Q 文档中读到的内容。 https://github.com/kriskowal/q#tutorial

这是理想的情况,因为我使用的是 q-io/http,它使用 promise 来发出请求。但是,该函数在新的 Promise 中返回正文的值。

而不是将其余代码嵌套在我的第一个函数中。我希望在嵌套承诺完成时收到通知。但是,由于范围,我似乎无法做到。但我一直在阅读,我的外部功能应该成为内部承诺的价值。我错过了什么吗?

例如

module.exports = function (obj) {
  var getFiles = HTTP.request(obj);

  getFiles
   .then(function(res) {
      return res.body.read()
    });
  return getFiles;
};

我想在 res.body.read() 使用 Q.all() 履行其承诺时收到通知,但我不知道如何获得该值。我觉得 getFiles 应该成为内心的承诺。对吧?

【问题讨论】:

  • 尝试从外部函数返回getFiles.then()的输出。
  • 感谢 Beetroot-Beetroot,您的回答在这种情况下也肯定有效。
  • Adam,这和 Bergi 的解决方案一样。为了简短起见,我省略了简化。如您所见,方法链接使得分配给getFiles 是不必要的。
  • 明白了。完全有道理。再次感谢...

标签: javascript node.js http promise q


【解决方案1】:

我觉得 getFiles 应该成为内心的承诺。对吧?

没有。承诺不会改变它的价值。但是,.then 方法确实返回了一个新的承诺,该承诺将使用“内部承诺”read 方法(将在getFiles 解决时调用)的结果来解决。

您可以将代码缩短为

module.exports = function (obj) {
  return HTTP.request(obj).then(function(res) {
    return res.body.read()
  });
};

【讨论】:

  • 仍在尝试处理此问题,但效果很好。谢谢伯吉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2019-10-21
  • 1970-01-01
相关资源
最近更新 更多