我有以下函数查询SQLite数据库并将结果推送到稍后使用的数组中。我需要等待每个语句来处理(self.projectSetEditList)中的表。但是看起来主延迟不等待所有的承诺......我只是这样做错了吗?在进入下一个函数之前,我需要知道所有sql结果何时准备就绪。
/// <summary>Validates user INSERTS to project_set entities</summary>
this.initProjectSetAdds = function ()
{
var promises = [];
var masterDeferred = new $.Deferred();
///var count = (self.projectSetEditList.length - 1);
$.each(self.projectSetEditList, function (index, syncEntity)
{
var def = new $.Deferred();
//get the config entity definition object
var entityDefinition = self.getEntityDefinition(syncEntity.entity_name);
self.db.executeSql(self.getAddsSql(entityDefinition)).done(function (tx, insertResults)
{
self.projectSetAdds.push({ definition: entityDefinition, addedObjects: dataUtils.convertToObjectArray(insertResults) });
def.resolve(true);
});
promises.push(def);
});
//resolve all deferred and return to caller
$.when.apply($, promises).then(function ()
{
masterDeferred.resolve(arguments);
},
function ()
{
masterDeferred.reject(arguments);
});
return (masterDeferred.promise());
}
里面唯一的异步函数是executeSql ...非常感谢任何建议
答案 0 :(得分:2)
您的代码对我来说似乎不必要了。
由于$.when
也会创建承诺,所以不要自己创建masterDeferred
,只需执行以下操作:
return $.when.apply($, promises);
唯一的功能差异在于此版本会将true
结果作为单个参数传递给最终回调,而您的代码将传递[true, true, ...]
个值的单个数组。