根据我在$ q源代码中看到的内容,promise.$$state.status
可以等于-1。这与某种方式有关,以通知功能。
在什么条件下承诺状态可以等于-1,它在Angular承诺生命周期中的位置是什么?
答案 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状态:
Promise()
的链接status
始终为-1 承诺生命周期中的-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。