我正在调用一个函数,它将编辑内容保存到数据库并返回一个dojo/Deferred
. 我发现我无法一次保存所有记录,因此我将每次调用限制为一次仅发送 150 条记录,并使用for
循环将多个调用链接在一起。
每次运行这段代码,前150条记录保存成功,最后一批记录保存成功。中间的任何批次似乎都被最后一批覆盖。
这是代码:
applyEdits : function(layer, adds, updates, deletes, editInterval) {
adds = adds || [];
updates = updates || [];
deletes = deletes || [];
var maxFeatures = Math.max(adds.length, updates.length, deletes.length);
var editInterval = editInterval || 155;
var deferred = new Deferred();
deferred.resolve();
for (var i = 0; i < maxFeatures; i+=editInterval) {
var addGroup = adds.slice(i, i+editInterval);
var updateGroup = updates.slice(i, i+editInterval);
var deleteGroup = deletes.slice(i, i+editInterval);
deferred = deferred.then(lang.hitch(this, function() {
return layer.applyEdits(addGroup, updateGroup, deleteGroup).then(function() {
console.log("success");
}, function(error) {
console.log(error);
});
}));
}
return deferred;
adds
, updates
, 和deletes
都是Array
的Object
。我的猜测是,因为Array
' 的存储引用,每次循环都会覆盖引用。Array
在将它们传递给 之前,我尝试创建 's 的深层副本layer.applyEdits
,但这没有效果。