$q 通知和-1 承诺状态

$q notify and -1 promise state status

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

在什么条件下 promise state status 可以等于 -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);
  }
}

只要 promise 未解决,它看起来就是 -1。如果返回的是承诺 (if (isFunction(then)) ),它将保持 -1 状态并触发返回的函数。如果返回的不是 promise,那么它的状态将是 1.

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

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

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

跟踪所有 Promises() 的链后,这些 Promises() 与 resolves 绑定在一起 - 最终的 promise 结果只有 promise.then 最后一个实际解决的结果 (isObject(val))。

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

  1. 您在链
  2. 中创建了 link 到非最终 Promise()
  3. 您使用了 link 的 status,它始终为 -1

promise 生命周期中的 -1 部分只是确定链中的当前 promise 不是最终的和任何下一个 promise。这可以在 function done() 中找到,其中为 stack of promises 创建了一个 resolution 并用之前的 $$values 更新了它。

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