$ q notify和-1 promise状态

时间:2015-10-31 18:07:06

标签: angularjs angular-promise

根据我在$ q源代码中看到的内容,promise.$$state.status可以等于-1。这与某种方式有关,以通知功能。

在什么条件下承诺状态可以等于-1,它在Angular承诺生命周期中的位置是什么?

2 个答案:

答案 0 :(得分:2)

我通过另一个承诺解决了承诺,获得了状态-1。

x = $q.defer();
y = $q.defer();
x.resolve(y.promise);

根据代码,x将状态更改为-1以等待解析承诺y。但解决y后的事件,x状态仍为-1。

跟踪与resolve绑定在一起的所有Promises()链后 - 最终的promise只会导致promise.then的最后一个使用实际的东西(isObject(val))解析。

在这种情况下,只有在以下情况下才能获得-1状态:

  1. 您在链中创建了非最终Promise()的链接
  2. 您使用的链接status始终为-1
  3. 承诺生命周期中的-1部分只是确定链中的当前承诺不是最终的和任何下一个承诺。这可以在function done()中跟踪,其中一组承诺创建了一个resolution,用先前的$$values更新[HttpGet] [EnableQuery] public IHttpActionResult ForBuyerOrganisations([FromUri]int[] orgIds) { // this returns IQueryable<TRDetails> // i tried throwing a ToList on there too to ensure it works and it does var result = service.ForBuyerOrgs(orgIds); return Ok(result); }

    在链状态0或1指向最终承诺,将作为最终点。

答案 1 :(得分:1)

返回角度源代码:

$$resolve: function(val) {
  var then, fns;

  fns = callOnce(this, this.$$resolve, this.$$reject);
  try {
    if ((isObject(val) || isFunction(val))) then = val && val.then;
    if (isFunction(then)) {
      this.promise.$$state.status = -1;
      then.call(val, fns[0], fns[1], this.notify);
    } else {
      this.promise.$$state.value = val;
      this.promise.$$state.status = 1;
      scheduleProcessQueue(this.promise.$$state);
    }
  } catch (e) {
    fns[1](e);
    exceptionHandler(e);
  }
}

只要承诺未解决,它看起来就是-1。如果返回的是一个promise(if (isFunction(then))),它将保持-1状态并触发返回的函数。如果返回的内容不是承诺,则其状态为1。