Javascript 使用角度承诺的dropbox身份验证

Javascript 使用角度承诺的dropbox身份验证,javascript,angularjs,Javascript,Angularjs,我正在尝试使用Angular中的Promissions编写dropbox身份验证代码。我有一个名为dropboxAuthServ的服务,它返回一个包含创建的dropbox客户端实例的promise对象 在我的控制器中,我试图使用这个promise对象在视图上显示一些文本。我还计划稍后链接承诺,这样我就可以使用在我正在编写的另一个服务中创建的dropboxClient 问题是它不起作用。我不熟悉javascript中的角度和模块化编程。所以我的理解可能有缺陷。请随意分享您的意见。我附上下面的代码

我正在尝试使用Angular中的Promissions编写dropbox身份验证代码。我有一个名为dropboxAuthServ的服务,它返回一个包含创建的dropbox客户端实例的promise对象

在我的控制器中,我试图使用这个promise对象在视图上显示一些文本。我还计划稍后链接承诺,这样我就可以使用在我正在编写的另一个服务中创建的dropboxClient

问题是它不起作用。我不熟悉javascript中的角度和模块化编程。所以我的理解可能有缺陷。请随意分享您的意见。我附上下面的代码

控制器

myApp.controller('MainCtrl', ['$scope', 'dropBoxAuthServ',
    function ($scope, dropBoxAuthServ) {
        dropBoxAuthServ
            .getDbClient()
        .then(function(result){
            alert('Success' + result);
        });
    //$scope.result = dropBoxAuthServ.result;

}]);
服务

var myApp = angular.module('quickPlansApp',[]);

myApp.factory('dropBoxAuthServ', function($q){
    var
      dropboxClientCredentials,
      //dropboxAuthDriver,
      dropboxClient;

    // Insert your Dropbox app key here:
    var DROPBOX_APP_KEY = '';

    dropboxClientCredentials = {
      key: "xxxxxxxxxxxxxxx"
    };
    dropboxClient = new Dropbox.Client(dropboxClientCredentials);
    return{
        getDbClient: function(){
               var defer = $q.defer;
               dropboxClient.authenticate(function (error, client) {
                   if (error) {
                     throw error;
                   }
                   $timeout(function(){
                    defer.resolve({
                    'DBClient': client
               })},1000);
                });
            return defer.promise;
         }
      };
});

为什么要使用超时?您没有注入$timeout,因此当您尝试使用它时,它应该会出错。除此之外,请将console.log记录到您的客户机上,然后查看返回的内容。警报不会向您显示任何可识别的内容。不确定这是否是打字错误,但您需要调用$q.defer函数,而不是引用它:var defer=$q.defer()@阿德里克曼。。。我使用$timeout作为实现异步调用的一种方法。我尝试注入$timeout,甚至尝试删除它。console.log(客户端)未返回任何内容。我的方法有什么根本问题吗?@tasseKATT。。。谢谢你指出这一点……但那是一个错误typo@meajmal基本面-不确定。但是,在远程API响应之前,回调不会运行,因此调用不会有帮助。您是否在任何地方检查结果['DBClient']?