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

Can I handle an error from the gapi.client.load's promise?

问题是否gapi.client.load returns the promise was discussed here. And as Mike Witt回答,代码:

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

returns promise,但是没有任何错误回调函数

我尝试处理错误:

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

有什么方法可以处理这个错误吗?我试图在文档中找到它,但没有成功。

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

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

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

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

[2] Catch Error from gapi.client.load

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

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

在某些错误的情况下,gapi.client.load returns 一个错误对象例如:

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

但它必须是 "caught" 在 .then() 而不是在 .catch()

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

代码如下:

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