promise()on promise error function --javascript

时间:2016-02-26 18:29:15

标签: javascript promise bind angular-promise angular-http

我找到了这个代码片段。在这种情况下,有人可以解释.bind(this)的目的吗?我们现在可以在哪里访问this?在已解决的承诺中?

get: function(endpoint, params, callback) {
  var cb = callback || angular.noop;
  var deferred = $q.defer();

  $http.get(
    endpoint,
    params
  ).
  success(function(data) {
    deferred.resolve(data);
    return cb();
  }).
  error(function(err) {
    deferred.reject(err);
    return cb(err);
  }.bind(this));

  return deferred.promise;
}

1 个答案:

答案 0 :(得分:1)

函数对象的bind(newContext)方法的目的是返回一个带有上下文this的新函数作为传递给bind()的第一个参数。

例如:

var message = {text: 'I am the context'};

function tryMe() {
  console.log(this);
}

tryMe(); // will print undefined (in strict mode) or global object
tryMe.bind(message)(); // will print '{text: 'I am the context'}'

在您的示例中,使用bind()的想法是将this方法的上下文get()保留在错误处理程序中:

.error(function(err) {
    deferred.reject(err);
    //now use this.get() for example
    return cb(err);
  }.bind(this));

但是,在处理程序中没有调用与新上下文关联的方法。

Gentle explanation of this中查看更多详情。