我有一个有趣的情况。我正在创建一个增强型Datagrid(大约24000个条目)。因此,我计划加载一个小的子集,以便在另一个请求完成时向用户显示一些数据。您可以在下面的代码中看到我正在尝试做的事情。现在的问题是,“加载”中的这两个功能将更新网格数据存储。我想确保第二个xhrGet中的updateDataStore()仅在createDataStore()完成之后才被调用。这是必需的,因为我正在为数据存储中的行动态创建ID。
我不想在第二个xhrGET完成之前保留第二个xhrGET请求。
**更新商店的代码**
var ds = dijit.byId(“ grid”)。store;
ds.newItem();
创建网格并发出两个xhrGET请求的代码

CreateEmptyGrid();

dojo.require("dojo._base.xhr");

dojo.xhrGet({
url:"url1",
handleAs:"json",
load: function(data){createDataStore(data);
}
});
dojo.xhrGet(
  {
    url:"url2",
    handleAs:"json",
    load: function(data){updateDataStore(data);}
});

最佳答案

这是DeferredList的示例

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:scriptBlock id="scriptBlockPromises">
        <xp:this.value><![CDATA[
        require(["dojo/request", "dojo/DeferredList"], function(request, DeferredList) {
            var responses = new Array();

            var promise1 = request("/path/to/data/1").then(function(response) {
                createDataStore(response);
            });

            var promise2 = request("/path/to/data/2").then(function(response) {
                responses[0] = response;
            });

            var list = new DeferredList([promise1, promise2]);
            list.then(function(result) {
                updateDataStore(responses[0]);
            });
        });]]></xp:this.value>
    </xp:scriptBlock>

</xp:view>

09-13 06:48