Angularjs $q通知和-1承诺状态

Angularjs $q通知和-1承诺状态,angularjs,angular-promise,Angularjs,Angular Promise,根据我在$q源代码中看到的,promise.$$state.status可以等于-1。这在某种程度上与通知功能有关 在什么条件下承诺状态可以等于-1,以及它在Angular promise生命周期中的位置?返回Angular源代码: $$resolve: function(val) { var then, fns; fns = callOnce(this, this.$$resolve, this.$$reject); try { if ((isObject(val) ||

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


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

返回Angular源代码:

$$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,只要承诺没有兑现。如果返回的是一个承诺(
If(isFunction(then))
),它将保持-1状态,并触发一个返回函数的响应。如果返回的不是承诺,则状态为1。

我已获得状态-1,并用另一个承诺解析承诺

x = $q.defer();
y = $q.defer();
x.resolve(y.promise);
根据代码,
x
将状态更改为-1以等待解析承诺
y
。但事件在解析
y
x
状态后仍为-1

跟踪所有与Resolve绑定在一起的
Promises()
链后,最终的promise结果为
promise。然后
仅最后一个用实际内容解析的(
isObject(val)

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

  • 您在链中创建了指向非最终
    Promise()
    的链接
  • 您使用的链接的
    状态始终为-1
  • 承诺生命周期中的-1部分只是确定链中的当前承诺不是最终承诺和任何下一个承诺。这可以在
    function done()
    中进行跟踪,其中为承诺堆栈创建了一个
    分辨率
    ,该分辨率用以前的值更新其
    $$值


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

    您不需要关心承诺的内部状态。这纯粹是内部的东西。你所需要知道的是,承诺可能会被搁置、拒绝或履行。在承诺代码中,这是否由-1、42或666表示并不重要。@JBNizet我知道所有$$东西都被认为是内部的,不适合经常使用。我确实关心angularjs内部的东西是如何工作的,我认为这个问题是正确的。我认为你能理解这一点的最好方法是自己用未统一的angularjs调试代码,只需一点努力,你怎么说?:)尽管如此,这个问题似乎是有道理的。@PSL我更愿意抽出这段时间回答其他人的问题。我希望ng专家已经得到了答案,并渴望分享他们的知识。你最好不要依赖于内部的东西,因为它们将在新版本中更新。这正是我浏览的代码部分。未解析承诺的状态为0,而不是-1。这不是一个困难的问题,但我想它需要大量的理解$q是如何工作的。所以我猜-1状态的含义是“取决于连锁承诺的解决方案”。这意味着连锁不再需要承诺,因为你的。。。呃。。。真正的愿望是了解链条的实际结果,而不是传递的承诺。所以,是的,你在某种程度上是对的。最有趣的是,它可以用来强制链条结束,我希望(正如我记得的那样)
    .race()
    方法可以使用它,它正在寻找第一个实际的承诺,而不是
    promise()