可以用于云端点的gapi.client.load返回一个承诺吗?

时间:2015-03-06 15:04:21

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

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');

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

3 个答案:

答案 0 :(得分:1)

进一步调查,似乎如果你发送“undefined”作为第三个praameter,那么你可以使用这个调用作为承诺,如:

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

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

答案 1 :(得分:0)

如果目标只是在加载客户端后执行某些操作,您只需检查回调函数中的错误。这可以使用或不使用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。

答案 2 :(得分:-2)

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

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

要解决这个问题,可以通过将所有回调转换为promises来编写(或更好地生成)瘦包装器

,如https://riztaak.wordpress.com/2015/04/05/promises-promises-using-google-cloud-endpoint-in-angularjs/

中所述