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

如何截获promise响应或捕获?

祁英哲
2023-03-14

我试图拦截来自所有promise然后方法的响应。但是我不能在原型然后方法中得到响应数据。请找到下面的代码。

(function(Promise) {
   var originalThen = Promise.prototype.then;
   var originalCatch = Promise.prototype.catch;
   Promise.prototype.then = function() {
      console.log(this, arguments);
      return originalThen.apply(this, arguments);
   };
   Promise.prototype.catch = function() {
      return originalCatch.apply(this, arguments);
   };
})(this.Promise)

在上面的代码中,我可以看到控制台打印在所有Promise调用中。但是我无法在then中获得响应对象。

控制台中打印的this对象值:

“then”原型方法中的打印参数:

请建议我在then方法中获取所有promise方法的响应对象。

我尝试使用“arguments[0].arguments”(then回调中的响应对象)获取该值。但它抛出了下面的错误

未捕获的TypeError:“调用方”和“参数”是受限制的函数属性,无法在此上下文中访问。

请给我建议拦截响应对象的解决方案。

提前谢谢。

共有2个答案

傅琦
2023-03-14

然后()在使用promise添加回调时被调用,在promise实际具有值之前。
它的参数是成功和错误回调。

要查看promise的值,您需要实际调用然后()并传递回调以查看其最终值。(

华章横
2023-03-14

then是一种同步方法,用于注册成功和失败回调。它立即返回。

要截取未来值,请插入您自己来代替成功回调:

(function(Promise) {
   var originalThen = Promise.prototype.then;
   Promise.prototype.then = function(onFulfilled, onFailure) {
      return originalThen.call(this, function(value) {
        console.log(value);
        return onFulfilled(value);
      }, onFailure);
   };
})(this.Promise);

Promise.resolve(3).then(() => console.log("Done"));
 类似资料:
  • 问题内容: 我有以下代码: 我想捕获HTML响应?我该怎么做呢?我可以向form1.submit方法注册任何回调函数吗? 问题答案: 使用普通的javascript,您将无法轻松做到这一点。发布表单时,表单输入将发送到服务器,页面会刷新- 数据在服务器端处理。也就是说,该函数实际上不返回任何东西,它只是将表单数据发送到服务器。 如果您真的想用Javascript获得响应(无需刷新页面),则需要使用

  • 我使用Spring设置,使用json映射转换器将POJO类作为json发送回客户端。 例如。: 这将返回例如类似于客户端的内容: 我想截取所有控制器操作,将json包装成如下内容: 最好的方法是什么?

  • 问题内容: 我正在使用pythonDjango创建一个Web应用程序。我正在使用selenium来启动无头浏览器(phantomjs)并单击几次,直到到达特定页面。我希望捕获网络流量并获得特定网络呼叫的响应。该网络调用实际上包含一个html文档作为其响应。 有什么办法可以做到这一点? 问题答案: 您可以访问浏览器或chromedriver日志,它们在网络响应方面略有不同。称为浏览器日志,称为驱动程

  • 考虑下面的代码: 我想做的是用我应该从JSON响应中获得的错误消息捕获错误。我希望在我的第二个console.log中得到一个响应,但是不知何故,响应在第一个console.log.我如何在第一个实例中得到我想要的响应? 此外,为什么响应在第一个实例中给我“ok”,即使应用编程接口密钥不存在? 为什么我必须返回rsp.json()才能在第二个实例中获得正确的JSON,而响应应该已经是JSON格式的

  • 我有一个基于springboot的restful Web服务。我有CryptoResponseBodyAdvision从控制器捕获响应,从响应体中创建JWE并将JWE作为API响应发送。公共类CryptoResponseBodyAdvice实现ResponseBodyAdvice 当某些异常发生并请求到达异常解决程序时,麻烦就来了。在这种异常场景中,响应不受CryptoResponseBodyAd

  • 我正在寻找一种方法来处理与前端的通信,以防响应状态(ResponseStatus)导致的错误,从而 如果回复是400/401/403,我可以记录信息并发送特定消息 如果响应为500,我可以记录错误并发送另一条特定消息 等等 在我们的Api网关中,我们有一个(),我们在其中处理异常并将自己的DTO返回给前端。 如果我以单个异常为目标(参见下面的示例),那么一切都可以正常工作,但如果我只想以响应HTT