我有以下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()
正在返回已解析的延迟对象
答案 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);
});