【问题标题】:Wrapping/intercepting a promise in an inner function在内部函数中包装/拦截承诺
【发布时间】:2017-09-29 05:13:25
【问题描述】:

我很难找到问题的答案,可能是因为我不知道如何提问(使用什么搜索词)。我真的很难理解 Promise,并且观看了许多教程视频,但仍然没有得到一些基本的东西来让它点击。

在 Node 中,我使用 request-promise 模块,当我调用 rp() 方法时,它会返回一个 promise。我打电话 返回 rp(服务); 从函数内部。但是我想要做的是向它添加一个 .then() 处理程序,以对服务调用的结果进行一些后处理,然后再将承诺返回给调用者,以便调用者仍然可以拥有自己的 then处理程序。

我该如何做到这一点?

【问题讨论】:

  • 也许你可以给我们看一些你的代码?
  • return rp(service).then(…)?注意then 为回调结果返回另一个承诺

标签: node.js promise wrapper


【解决方案1】:

查看您当前的代码有助于更好地了解您到底在哪里苦苦挣扎。

通常,您可以将 Promise 视为可以链接在一起的某些未来值的占位符。

如果我正确理解了您的问题,您想向服务器发出请求,接收响应,对响应进行处理并将其返回给调用者。

const callService = (url) => {
  // make sure to return your promise here
  return rp(url)
    .then((html) => {
       // do something with html
       return html;
     });
};

现在你可以这样称呼它了-

callService('http://www.google.com')
  .then((html) => {
     console.log(html);
  }).catch((err) => {
    // error handling
  });

常见的错误是在顶级函数和随后的 then 函数中省略 return 语句。

请随时提供更多详细信息。

【讨论】:

  • 谢谢 - 这就是我想要做的。我没有意识到在.then 上添加return rp(url) 就这么容易。这行得通。 :)
  • @user1588877 没问题!习惯它需要一点时间,但是一旦你掌握了它,它就会比回调好得多。只要确保你总是在中间和顶层返回。尝试 async/await 下一个!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2018-12-28
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多