如何在当时拦截Promises响应或捕获?

时间:2017-08-15 20:09:24

标签: javascript reactjs ecmascript-6 promise es6-promise

我试图拦截所有Promises然后方法的响应。但我无法在原型方法中获得响应数据。请找到以下代码。

(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'原型方法中的打印参数:

enter image description here

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

我试图使用“arguments [0] .arguments”(当时回调中的Response对象)获取值。但是它抛出以下错误

  

未捕获的TypeError:'caller'和'arguments'是受限制的函数   属性,在此上下文中无法访问。

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

在承诺实际具有值之前,在使用承诺添加回调时调用

then() 它的论点是成功和错误回调。

要查看promise的值,您需要实际调用then()并传递回调以查看其最终值。 (或者包装你传递的回调并将你的包装器传递给真正的then()