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');
这里有第四个参数,它不是成功函数。所以我不确定如何使用承诺。
答案 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
}
如果你真的需要一个返回的promise,你可以简单地将这段代码包装在一个函数中,并在上面的回调函数中返回一个promise。
答案 2 :(得分:-2)
" Cloud Endpoints客户端库不支持AngularJS的Promise API来描述这种异步处理。"
要解决这个问题,可以通过将所有回调转换为promises来编写(或更好地生成)瘦包装器
,如https://riztaak.wordpress.com/2015/04/05/promises-promises-using-google-cloud-endpoint-in-angularjs/
中所述