Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 云端点的gapi.client.load能否返回承诺?_Javascript_Angularjs_Google App Engine_Google Cloud Endpoints - Fatal编程技术网

Javascript 云端点的gapi.client.load能否返回承诺?

Javascript 云端点的gapi.client.load能否返回承诺?,javascript,angularjs,google-app-engine,google-cloud-endpoints,Javascript,Angularjs,Google App Engine,Google Cloud Endpoints,google api的google gapi.client.load可以返回前面讨论过的承诺。但是,如果您希望使用云端点为自己的应用程序引擎组件使用javascript客户端,则gapi.client.load具有不同的方法签名,如本文所示: gapi.client.load('guestbook', 'v1', function() { $scope.is_backend_ready = true; $scope.list(); }, '/_ah/api'); 这里有

google api的google gapi.client.load可以返回前面讨论过的承诺。但是,如果您希望使用云端点为自己的应用程序引擎组件使用javascript客户端,则gapi.client.load具有不同的方法签名,如本文所示:

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

这里有第四个参数,它不是success函数。因此,我不确定如何使用承诺。

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

  gapi.client.load('guestbook', 'v1', undefined, '/_ah/api').then(function() {
    $scope.is_backend_ready = true;
    $scope.list();
  });
我还没有看到任何谷歌文档。请告诉我是否存在此问题。

“云端点客户端库不支持AngularJS的Promise API来描述此类异步处理。”

您可以在中找到这一点

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


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


如果您确实需要返回一个承诺,您可以简单地将此代码包装在一个函数中,然后在上面的回调函数中返回一个承诺

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