Javascript 云端点的gapi.client.load能否返回承诺?
google api的google gapi.client.load可以返回前面讨论过的承诺。但是,如果您希望使用云端点为自己的应用程序引擎组件使用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'); 这里有
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
遵循承诺的规范,我认为没有问题。因为它是一个谷歌图书馆,我想它是的。