6

我有一种方法来处理来自我的 google javascript 客户端(gapi)的响应:

var processResponse = function(response) {
              result._state = 'loaded';
              response._epoch = (new Date()).getTime();
              ...

几次我收到以下错误:

TypeError: Cannot assign to read only property '_epoch' of false
    at processResponse (http://0.0.0.0:9000/scripts/services/haparaapi.js:110:31)
    at wrappedCallback (http://0.0.0.0:9000/bower_components/angular-scenario/angular-scenario.js:20892:81)
    at http://0.0.0.0:9000/bower_components/angular-scenario/angular-scenario.js:20978:26
    at Scope.$eval (http://0.0.0.0:9000/bower_components/angular-scenario/angular-scenario.js:21967:28)
    at Scope.$digest (http://0.0.0.0:9000/bower_components/angular-scenario/angular-scenario.js:21796:31)
    at Scope.$apply (http://0.0.0.0:9000/bower_components/angular-scenario/angular-scenario.js:22071:24)
    at http://0.0.0.0:9000/bower_components/angular-gapi/modules/gapi-client.js:121:32
    at https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en_GB.hE_reuZ6VdE.…/ed=1/am=AQ/rs=AGLTcCPj66Crj6soG8dKJE8lBSc_RPXXKA/cb=gapi.loaded_0:604:138
    at https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en_GB.hE_reuZ6VdE.…/ed=1/am=AQ/rs=AGLTcCPj66Crj6soG8dKJE8lBSc_RPXXKA/cb=gapi.loaded_0:579:311
    at Object.<anonymous> (https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en_GB.hE_reuZ6VdE.…1/ed=1/am=AQ/rs=AGLTcCPj66Crj6soG8dKJE8lBSc_RPXXKA/cb=gapi.loaded_0:163:76) 

这个错误通常不会发生,所以我没有设法记录响应的实际样子。

错误是什么意思?我不应该为响应分配值吗?

4

1 回答 1

9

看起来问题是您的processResponse()回调实际上被赋予了false. 因此,本质上您是在尝试将 _epoch 属性分配为 false 值。

请参阅: https ://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientRequest

从手册:

请求成功或失败时执行的回调函数。jsonResp 包含解析为 JSON 的响应。如果响应不是 JSON,则此字段将为 false

当您在严格模式 ( 'use strict') 下运行 javascript 时,它会引发TypeError类似您正在经历的情况:

'use strict';
var processResponse = function(response) {
    response._epoch = (new Date()).getTime();
};

processResponse(false);   // Uncaught TypeError: Cannot assign to read only property '_epoch' of false 

JSFiddle:http: //jsfiddle.net/0tq6mobm/

建议您在尝试将时间戳分配给response.

于 2014-10-21T04:06:25.213 回答