当我想从Dropbox API读取目录时遇到问题,dropbox.js https://github.com/dropbox/dropbox-js
来自API的读取目录函数看起来像这样,我想分配带有角度的值,以便在我的HTML中轻松访问它。
在有用的问题之后更新
client.readdir("/", function(error, entries, stat1, stat2) {
if (error) {
return showError(error);
}
$scope.dbItems = stat1;
$scope.$digest();
});
HTML代码:
<ul ng-repeat="dbItem in dbItems">
<li><input type="image" src="img/folder.png">{{dbItem.name}}</input></li>
</ul>
我的问题是Dropbox调用需要几毫秒,所以我必须重新加载页面才能打印收集的数据。我尝试了一些有角度和JQuery承诺的东西,但我无法让我工作。我找到的关于promises的所有示例都有一个setTimeout函数,并且相当容易实现,但是当我尝试使用Dropbox实现它时它不起作用。有没有尝试类似的人?
更新我的问题
现在HTML已正确更新,但我还希望将所有Dropbox目录加入以导出为JSON。我已将上面的函数更新为:
$scope.listDB = function()
{
client.readdir(dirToString(), function(error, entries, stat1, stat2) {
if (error) {
return showError(error); // Something went wrong.
}
$scope.dbItems = stat2;
$scope.$digest();
testTemp = stat1._json;
setFolders(testTemp);
function setFolders(current)
{
for(var i=0,folders = current.contents;i<folders.length;i++)
{
if(folders[i].is_dir)
{
folders[i].name = folders[i].path.replace(/\/([^)]+)\//,"");
folders[i].name = folders[i].name.replace('/',"");
$scope.listDBinner(folders[i].name);
var inner = $scope.innerItems;
folders[i].contents = inner;
setFolders(folders[i]);
}
}
}
});
};
使用listDBinner:
$scope.listDBinner = function(name)
{
client.readdir(name, function(error, entries, stat1, stat2) {
if (error) {
return showError(error); // Something went wrong.
}
$scope.innerItems = stat1;
$scope.$digest();
console.log($scope.innerItems);
});
console.log($scope.innerItems);
};
问题是client.readdir中的$ scope.innerItems的console.log是正确的,而外部的console.log只是空的。我知道这可能应该用某种Promise解决,但我真的无法让它工作。