Dojo延期未解决

时间:2014-06-06 13:16:49

标签: javascript dojo deferred

我有以下javascript

var setPrefillVehicleValueDeferred = new Deferred();
makePrefillCallsDeferred.then(lang.hitch(this, function () {
    setPrefillVehicleValueDeferred = this._setPrefillVehicleValue();
    //this is being called
    setPrefillVehicleValueDeferred.then(function () {
        alert("resolving recall inside");
        recallDfd.resolve(data);
    });
}));  

//NOT being called
setPrefillVehicleValueDeferred.then(function () {
    alert("resolving recall");
    recallDfd.resolve(data);
});

注意,任何...deferred...dfd变量都是Deferred个对象

我的问题是,在解决延迟时,没有触发隔离的setPrefillVehicleValueDeferred.then(),但是触发了移动到更近范围内的完全相同的代码。这只是代码片段,但我基本上需要执行隔离的then()调用,当前调用的调用仅用于调试目的,以查看出错的地方。

任何人都知道为什么我想要的不被触发?

我应该补充说this._setPrefillVehicleValue()正在返回已解析的延迟对象

1 个答案:

答案 0 :(得分:2)

当进行外部setPrefillVehicleValueDeferred.then调用时,setPrefillVehicleValueDeferred的值是您创建的新Deferred()对象,因为makePrefillCallsDeferred是异步的。所以它不是基于this._setPrefillVehicleValue返回的延迟对象。

您可以在this._setPrefillVehicleValue解析后解析外部Deferred对象,我认为这样可以获得所需的结果:

var setPrefillVehicleValueDeferred = new Deferred();
makePrefillCallsDeferred.then(lang.hitch(this, function () {
    this._setPrefillVehicleValue().then(function () {
        setPrefillVehicleValueDeferred.resolve();
    });
}));  

setPrefillVehicleValueDeferred.then(function () {
    alert("resolving recall");
    recallDfd.resolve(data);
});