javascript - 如何拦截 then 或 catch 中的 Promise 响应?

标签 javascript reactjs ecmascript-6 promise es6-promise

我试图拦截所有 Promise then 方法的响应。但我无法在原型(prototype) then 方法中获取响应数据。请找到下面的代码。

(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 调用中打印的控制台。但我当时无法获取响应对象。

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

enter image description here

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

enter image description here

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

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

Uncaught TypeError: 'caller' and 'arguments' are restricted function properties and cannot be accessed in this context.

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

提前致谢。

最佳答案

then 是一个注册成功和失败回调的同步方法。它立即返回。

要拦截 future 值,请将您自己插入到成功回调的位置:

(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"));

关于javascript - 如何拦截 then 或 catch 中的 Promise 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45700756/

相关文章:

javascript 以图形方式比较两个 JSON/XML 对象

reactjs - 如何将依赖于样式组件的 React 组件库提供给另一个也具有样式组件依赖项的库?

javascript - 如何在 React Native 中添加多个组件?

javascript - 将 withCredentials 设置为新的 ES6 内置 HTTP 请求 API : Fetch

javascript - Es2015 中的大括号

javascript - 阻止 Umbraco/TinyMce 将绝对 URL 转换为相对 URL

javascript - 从 HttpInterceptor 显示模式对话框

javascript - 如何获取javascript类属性列表

javascript - Highcharts - 如何从 HTML 表格中制作包含多个系列的散点图

javascript - ag-Grid 单元格渲染 - 自定义 Prop