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