Angular2 JSONP回调不工作

Angular2 JSONP回调不工作,angular,jsonp,Angular,Jsonp,我正在使用Firebase上托管的Angular2 CLI应用程序,并使用Firebase实时数据库。为了通过第三方OAuth对应用程序的用户进行身份验证,并提供生成的安全自定义令牌,我正在使用Google Cloud函数来处理OAuth并创建令牌。然后,通过cli应用程序向云函数发出JSONP请求,将该令牌返回给Angular2 cli应用程序。使用JSONP的原因是云函数托管在一个google域上,这会产生CORS问题 我已经解决了OAuth的复杂问题,并成功地发布了最终的JSONP请求,如

我正在使用Firebase上托管的Angular2 CLI应用程序,并使用Firebase实时数据库。为了通过第三方OAuth对应用程序的用户进行身份验证,并提供生成的安全自定义令牌,我正在使用Google Cloud函数来处理OAuth并创建令牌。然后,通过cli应用程序向云函数发出JSONP请求,将该令牌返回给Angular2 cli应用程序。使用JSONP的原因是云函数托管在一个google域上,这会产生CORS问题

我已经解决了OAuth的复杂问题,并成功地发布了最终的JSONP请求,如下所示-

      let tokenFunctionURL = 'https://us-central1-' + [FIREBASE PROJECT ID] + '.cloudfunctions.net/token';
  let url = tokenFunctionURL +
    '?callback=JSONP_CALLBACK';

jsonp
    .request(url, {method:'Get'})
    .map(res=>res.json())
    .subscribe(res => {
      console.log(res);
    });
/**/ typeof __ng_jsonp____req0_finished === 'function' && __ng_jsonp____req0_finished({"token":"eyJhbGci..."});
对于我收到的上述GET电话,我认为以下是有效的回应-

      let tokenFunctionURL = 'https://us-central1-' + [FIREBASE PROJECT ID] + '.cloudfunctions.net/token';
  let url = tokenFunctionURL +
    '?callback=JSONP_CALLBACK';

jsonp
    .request(url, {method:'Get'})
    .map(res=>res.json())
    .subscribe(res => {
      console.log(res);
    });
/**/ typeof __ng_jsonp____req0_finished === 'function' && __ng_jsonp____req0_finished({"token":"eyJhbGci..."});
但与此同时,我在Chrome开发者控制台中收到以下错误消息-

error_handler.js:54 EXCEPTION: Response with status: 200 Ok for URL: https://us-central1-[FIREBASE PROJECT ID}.cloudfunctions.net/token?callback=__ng_jsonp____req0_finished
Subscriber.js:227 Uncaught Response {_body: "JSONP injected script did not invoke callback.", status: 200, ok: true, statusText: "Ok", headers: Headers…}
我已经想了好几个小时了,但就是不知道如何克服它。我确实在Stack Overflow中看到了解决这个问题的其他线程,但似乎没有明确的答案,或者至少没有一个适合我的答案

跟踪Angular中的代码,我发现了以下链接-,这似乎表明JSONP调用没有完成(或者Angular 2堆栈的内部从未调用过finish()方法)

谢谢

编辑-我通过将Angular2堆栈从2.4.6升级到2.4.10解决了这个问题。显然,这个问题是在该特定版本中引入的。看这里- 虽然这个问题被否决的理由显然是合理的,但我希望这一发现将有助于面临同样问题的人