在jQuery中,.state()如何确定一个promise是挂起,已解决还是被拒绝

时间:2013-12-13 05:55:07

标签: javascript jquery promise deferred

我不明白是什么决定了一个承诺对象的状态。是什么导致对象或函数具有“pending”状态,而$(“。selector”)具有“已解决”状态。

代码如下:

var obj = { prop: "value" };

var deferred = new $.Deferred();
var promiseObj1 = deferred.promise(obj);
var promiseObj2 = $(".selector").promise();

console.log(promiseObj1.state());    // "pending"
console.log(promiseObj2.state());    // "resolved"

1 个答案:

答案 0 :(得分:2)

默认情况下,承诺的状态在创建时处于待处理状态。当创建承诺的延迟对象解析/拒绝承诺时,承诺的状态会发生变化。

var obj = { prop: "value" };

var deferred = new $.Deferred();
var promiseObj1 = deferred.promise(obj);
var promiseObj2 = $(".selector").promise();

console.log(promiseObj1.state());    // "pending"
console.log(promiseObj2.state());    // "resolved"

promiseObj1的情况下,您正在创建一个承诺,但是创建它的延迟对象既不会被拒绝/已解决,也就是暂挂状态的原因

promiseObj2的情况下(当匹配元素的fx队列中排队的所有操作都已完成时,它将被解析)因为默认情况下没有动画正在进行中,所以它被认为是解决。

演示:Fiddle