制作异步调用dropboxjs

时间:2014-03-06 08:59:16

标签: javascript angularjs asynchronous dropbox-api

当我想从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解决,但我真的无法让它工作。

0 个答案:

没有答案