这是我的基本情况:
function somePostThing() {
return $post("/someUrl").done(doSomething);
}
function doSomething(data) {
// do stuff with the data
}
var object = {};
object.deferred = somePostThing();
// A few cycles later, object.deferred may be resolved or unresolved
object.deferred.done(function () { /* ... */ });
最后一行可能有效,也可能无效,因为如果已解析延迟对象,done
将不会触发。我希望能够做到这样的事情:
function doSomethingWithData(data) {
// do stuff
}
var value;
if (object.deferred.isResolved()) doSomethingWithData(object.deferred.value());
else object.deferred.done(doSomethingWithData);
如何获取已解决的jQuery.Deferred()
的价值?
答案 0 :(得分:5)
不,这正是为什么整个“延期”机制应运而生的原因。如果在异步过程解决后传入“完成”功能,则肯定会立即执行。
来自jQuery API文档:
如果在解析Deferred之后deferred.then()添加了更多函数,则会立即使用先前提供的参数调用它们。
对于“.done()”函数也是如此。
答案 1 :(得分:1)
浏览器中的JavaScript是单线程的。因此,在以下代码段中:
object.deferred = somePostThing();
// Nothing can happen to object.deferred here
object.deferred.done(function () { /* ... */ });
第一行和最后一行之间不会发生任何事情。 “几个周期之后”并不意味着JavaScript-land。在执行的函数返回后,只会发生object.deferred
。