如何从已解析的jQuery.Deferred()中获取价值?

ben*_*tah 5 javascript jquery jquery-deferred

这是我的基本情况:

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 () { /* ... */ });
Run Code Online (Sandbox Code Playgroud)

最后一行可能有效,也可能无效,因为done在已解析延迟对象的情况下不会触发.我希望能够做到这样的事情:

function doSomethingWithData(data) {
  // do stuff
}

var value;
if (object.deferred.isResolved()) doSomethingWithData(object.deferred.value());
else object.deferred.done(doSomethingWithData);
Run Code Online (Sandbox Code Playgroud)

我如何获得已经解决的价值jQuery.Deferred()

Poi*_*nty 5

不,这正是为什么整个"延期"机制应运而生的原因.如果在异步过程解决后传入"完成"功能,它肯定会立即执行.

来自jQuery API文档:

如果在解析Deferred之后通过deferred.then()添加了更多函数,则会立即使用先前提供的参数调用它们.

对于".done()"函数也是如此.