【发布时间】:2015-01-16 19:57:21
【问题描述】:
我正在创建一个 JavaScript 库。因为我使用延迟方法进行异步调用。 但问题是,如果我记录输出 json 对象并没有显示所有项目。但是,如果我扩展对象,那么它会显示实际值。看下面的截图。
在这个console.log 中显示 subFolders 对象最初包含 0 个元素,但如果我展开该对象,则 subFolders 包含两个元素。此输出对象来自多个异步调用。以下是我的代码
RESTQueries.getFilesFromFolders = function(){
var execute = function(libraryName){
var libraryItems={rootFolder:[],subFolders:[]};
var deferred = $.Deferred();
var _url = makeProperUrl();
var itemsInRootFolder = getItemsFromFolder(libraryName,'files');
itemsInRootFolder.then(function(data){
var tempArray = [];
if(typeof(data.d.results)!='undefined' && data.d.results.length>0)
{
for(var i =0;i<data.d.results.length;i++)
{
tempArray.push({"name":data.d.results[i].Name});
}
}
libraryItems.rootFolder.push(tempArray);
}).then(function(){
var subFolders = getItemsFromFolder(libraryName,'folders');
subFolders.then(function(data){
for(var item in data.d.results){
var fName = data.d.results[item].Name;
if(fName!='Forms')
{
var subFolderItems = getItemsFromFolder(libraryName+"/"+fName ,'files');
subFolderItems.then(function(subItems,link){
var actualFolderName = link.split("/")[1];
var tempArray={};
var tempArray2 = [];
for(var i=0;i<subItems.d.results.length;i++){
tempArray2.push({"name":subItems.d.results[i].Name});
}
tempArray[actualFolderName]=tempArray2;
tempArray2="";
libraryItems.subFolders.push(tempArray);
});
}
}
});
}).then(function(){
deferred.resolve(libraryItems);
});
return deferred;
};
return{
execute:execute
}
}();
我正在执行这个函数,
RESTQueries.getFilesFromFolders.execute('HelpDocuments').then(function(data){
console.log(data);
},
function(err){
console.log(err);
});
为什么 json 对象的行为是这样的?我在哪里做错了?
【问题讨论】:
标签: jquery json jquery-deferred