我可以处理gapi.client.load承诺中的错误吗?

时间:2015-03-25 10:20:45

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

gapi.client.load是否返回承诺的问题已经讨论here。当Mike Witt回答时,代码:

gapi.client.load('guestbook', 'v1', undefined, '/_ah/api');

返回承诺,但没有任何错误回调函数

我试图处理错误:

gapi.client.load('guestbook', 'v1', undefined, '/_ah/api')
  .then(
     function() {
       //success
     },
     function(error) {
       //error
     }
  );

当我关闭端点模块时,它将永远不会进入错误处理程序。我只在控制台中收到以下错误:

GET http://localhost:8080/_ah/api/static/proxy.html?jsh=m%3B%2F_%2Fscs%2Fapps-s…3DIQ%2Frt%3Dj%2Fd%3D1%2Ft%3Dzcms%2Frs%3DAGLTcCOu-PQv0yFB8pB9mX2w3nuej8rl5Q net::ERR_CONNECTION_REFUSED  cb=gapi.loaded_0:163

有没有办法处理这个错误?我试图在文档中找到它,但没有成功。

3 个答案:

答案 0 :(得分:3)

过了一段时间我找到了答案:

gapi.client.load('guestbook', 'v1', undefined, '/_ah/api')
  .then(
    function(response) {
      if(response && response.hasOwnProperty('error')) {
         // error
      } else {
         // success
      }
    }
  );

如果出现某些错误, gapi.client.load 会返回一个错误对象,例如:

{error: {errors: Array[1], code: 404, message: "Not Found"}}

但必须在 .then()中“捕获”而不是 .catch()

答案 1 :(得分:1)

您可以轻松测试失败(至少现在)。我很确定这就是你要找的东西。

以下是代码:

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

答案 2 :(得分:0)

此方法的语法为:gapi.client.load(API_NAME,API_VERSION,CALLBACK);

你可以看看[1],这个stackoverflow问题也可以帮助你[2]。

'/ _ ah / api'不能用作回调,因为它是用于测试和查看Google App API的特定处理程序,例如在为移动应用程序使用端点时。

[1] https://developers.google.com/api-client-library/javascript/dev/dev_jscript#OptionLoadtheserviceAPIthenassembletherequest

[2] Catch Error from gapi.client.load