为什么这个对象在angular http承诺对象中是$window ?
Why is this object $window in angular http promise object
考虑以下angular服务:
app.factory( 'myService', function( $http )
{
var service =
{
someArray: [],
updatePendingIds: function()
{
console.log( this );
$http.get( "/get-stuff" ).
then( function( response )
{
console.log( this ); // someArray is not here!
});
}
}
}
在第一个console.log中,在angular的promise对象创建之前,"this"是服务对象本身,正如预期的那样。也就是说,它将有一个键"someArray"。
但是第二个控制台日志将其作为$window对象返回。两个问题:
- 为什么是$window而不是service对象?
- 我如何传递服务对象到$http承诺?
这是因为您在创建传递给promise then
方法的函数时创建了一个新上下文:
then( function( response ) // new function context
你需要将这个函数绑定到你需要的对象。
var handleResponse = function( response ) {
console.log( this );
};
$http.get( "/get-stuff" ).then(handleResponse.bind(this));
相关文章:
- 带有对象/原型的链式承诺(Q延期)
- AngularJS:根据值解析承诺对象
- 对承诺对象的混淆
- 尝试编写承诺时出错:承诺解析器对象不是函数
- 传播承诺并在新对象中扩展
- 是否可以将已解析的承诺分配给对象的属性
- AngularFire $createUser 的承诺不返回包含用户数据的对象
- 如何获取 Ember 组件对象内部承诺成功或错误回调
- 为整个承诺对象呈现承诺值
- 如何检查对象是否为承诺
- 如何在解决承诺后从承诺对象获取值
- 承诺不返回对象
- 具有ES6 /蓝鸟承诺的对象方法
- 基于当前平台创建承诺对象
- 如何调试此错误:未捕获(在承诺中)错误:对象作为 React 子项无效
- 将承诺的值分配给对象方法
- 什么是承诺对象
- 使用延迟对象/承诺的Ajax调用返回失败
- 将多个Bluebird承诺组合到一个承诺对象中
- 解析角度承诺时,请保持对调用对象的引用