推迟 Dojo Deferred
Posted
技术标签:
【中文标题】推迟 Dojo Deferred【英文标题】:Deferring a Dojo Deferred 【发布时间】:2013-02-06 14:17:08 【问题描述】:我在从小部件中的方法获取延迟返回时遇到了一点问题。该方法本身返回一个 Deferred,因为它是一个 xhrPost。代码就是这样(使用dojo 1.8)
调用代码:
quorum = registry.byId("quorumPanel");
var deferredResponse = quorum.updateSelectionCount();
deferredResponse.then(function(data)
console.log("Success: ", data);
, function(err)
console.log("Error: ", err);
);
以及小部件中的代码:
updateSelectionCount: function()
var self = this;
var deferredResponse = xhr.post(
url: "ajxclwrp.php",
content: [arguments here],
handleAs: "json");
deferredResponse.then(function(response)
var anotherDeferred = new Deferred();
var _boolA = true;
var _boolB = true;
dojo.forEach(response.result, function(relationshipInfo)
[do a bunch of stuff here too set _boolA and/or _boolB]
);
self._sethasRequiredAttr(_hasRequired);
self._setHasRequestedAttr(_hasRequested);
self.quorumInfo.innerhtml = quorumHtml;
// Below is not working
anotherDeferred.resolve('foo');
return anotherDeferred;
);
我是否需要设置另一个 promise 并使用 promise/all.我在这一点上感到困惑/沮丧。
TIA。
【问题讨论】:
【参考方案1】:.then() 方法返回另一个延迟。你只需要在里面放一个return语句。
updateSelectionCount: function()
var self = this;
var deferredResponse = xhr.post(
url: "ajxclwrp.php",
content: [arguments here],
handleAs: "json");
return deferredResponse.then(function(response)
var _boolA = true;
var _boolB = true;
dojo.forEach(response.result, function(relationshipInfo)
[do a bunch of stuff here too set _boolA and/or _boolB]
);
self._sethasRequiredAttr(_hasRequired);
self._setHasRequestedAttr(_hasRequested);
self.quorumInfo.innerHTML = quorumHtml;
return "foo";
);
【讨论】:
以上是关于推迟 Dojo Deferred的主要内容,如果未能解决你的问题,请参考以下文章
Dojo dojo.rawXhrPost 和 dojo.xhrPost
dojo的ready函数:dojo.ready(以前的dojo.addOnLoad)
如何将 dojo (dojo 0.x) FilteringTable 迁移到 (dojo 1.6) 中的 DataGrid?