我试图拦截所有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'对象值:
'then'原型方法中的打印参数:
请建议我在所有promises方法的then方法中获取响应对象。
我试图使用“arguments [0] .arguments”(当时回调中的Response对象)获取值。但是它抛出以下错误
未捕获的TypeError:'caller'和'arguments'是受限制的函数 属性,在此上下文中无法访问。
请建议我拦截响应对象的解决方案。
提前致谢。
答案 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()
)