【问题标题】:Can gapi.client.load for cloud endpoints return a promise?云端点的 gapi.client.load 可以返回一个承诺吗?
【发布时间】:2015-03-06 15:04:20
【问题描述】:

google api 的 google gapi.client.load 可以返回一个承诺,如 here 所讨论的那样。但是,如果您希望使用云端点将 javascript 客户端用于您自己的应用程序引擎组件,gapi.client.load 具有不同的方法签名,如以下角度帖子所示:

  gapi.client.load('guestbook', 'v1', function() {
    $scope.is_backend_ready = true;
    $scope.list();
  }, '/_ah/api');

这里还有第四个参数,不是成功函数。所以我不确定如何使用promise。

【问题讨论】:

  • 你能简单地将它包装在一个承诺中吗?
  • 我假设,因为谷歌的文档说它返回一个承诺,你可以。
  • 我的意思是你为什么不包装它?您可以检查 load 的返回是否是一个函数,这意味着它返回一个承诺。否则你可以使用$q.when 包裹它。
  • 按原样使用是否有缺点,例如:gapi.client.load(apiName, apiVersion).then(somefunction, errorFunction)?
  • 如果client.load遵循Promises的规范,我认为没有问题。因为它是一个谷歌图书馆,我认为它确实如此。

标签: javascript angularjs google-app-engine google-cloud-endpoints


【解决方案1】:

进一步调查,如果您将“未定义”作为第三个参数发送,那么您可以将此调用用作承诺,例如:

  gapi.client.load('guestbook', 'v1', undefined, '/_ah/api').then(function() {
    $scope.is_backend_ready = true;
    $scope.list();
  });

我还没有看到任何关于此的谷歌文档。如果存在,请告诉我。

【讨论】:

    【解决方案2】:

    如果目标只是在客户端加载后执行某些操作,您可以简单地检查回调函数中的错误。这将在有或没有 client.init 函数的情况下工作。像这样的:

    gapi.client.init({}).then(() => {
         gapi.client.load('some-api', "v1", (err) => { callback(err) }, "https://someapi.appspot.com/_ah/api");
    }, err, err);
    
    function callback(loadErr) {
        if (loadErr) { err(loadErr); return; }
        // success code here 
    }
    
    function err(err){
         console.log('Error: ', err);
         // fail code here
    }
    

    Example

    如果你真的需要返回一个promise,你可以简单地将这段代码包装在一个函数中,并在上面的回调函数中返回一个promise。

    【讨论】:

      【解决方案3】:

      “Cloud Endpoints 客户端库不支持 AngularJS 的 Promise API 来描述这种异步处理。”

      您可以在 https://cloud.google.com/solutions/angularjs-cloud-endpoints-recipe-for-building-modern-web-applications 中找到该内容。

      解决这个问题的方法是通过将所有回调转换为承诺来编写(或更好地生成)瘦包装器

      https://riztaak.wordpress.com/2015/04/05/promises-promises-using-google-cloud-endpoint-in-angularjs/中所述

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-27
        • 2015-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        相关资源
        最近更新 更多