首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Bluebird promises修复“分页中未定义的响应”(@google-cloud)

如何使用Bluebird promises修复“分页中未定义的响应”(@google-cloud)
EN

Stack Overflow用户
提问于 2020-01-07 10:36:26
回答 1查看 168关注 0票数 1

我花了相当长的时间对此进行故障排除,最终发现@google-cloud分页在使用bluebird promises时似乎中断了。如果我禁用了bluebird,它就会起作用,但由于该项目大量使用了Bluebird Promise功能,因此很难删除Bluebird。有没有人知道有没有别的变通办法?或者我应该向哪个模块提交错误报告?(请注意,这似乎发生在任何分页函数中,比如monitoring.getDescriptors)

代码语言:javascript
复制
global.Promise = require('bluebird');
const { PubSub } = require('@google-cloud/pubsub');

(async () => {
  const keyFilename = 'lib/gcloud-auth.json';

  const pubSub = new PubSub({ keyFilename });
  console.log('topics:', await pubSub.getTopics().catch(e => e));
})();

输出:

代码语言:javascript
复制
topics GoogleError: Undefined response in pagination method callback.
    at fetchNextPageToken (/opt/app/node_modules/google-gax/build/src/paginationCalls/pagedApiCaller.js:55:26)
    at Http2CallStream.<anonymous> (/opt/app/node_modules/@grpc/grpc-js/build/src/client.js:93:17)
    at Http2CallStream.emit (events.js:215:7)
    at /opt/app/node_modules/@grpc/grpc-js/build/src/call-stream.js:97:22
    at processTicksAndRejections (internal/process/task_queues.js:75:11)
From previous event:
    at Paginator.run_ (/opt/app/node_modules/@google-cloud/pubsub/node_modules/@google-cloud/paginator/build/src/index.js:167:25)
    at PubSub.Class.<computed> (/opt/app/node_modules/@google-cloud/pubsub/node_modules/@google-cloud/paginator/build/src/index.js:61:34)
    at /opt/app/node_modules/@google-cloud/promisify/build/src/index.js:69:28
From previous event:
    at PubSub.wrapper (/opt/app/node_modules/@google-cloud/promisify/build/src/index.js:54:16)
    at /opt/app/lib/index.js:8:38
    at Object.<anonymous> (/opt/app/lib/index.js:9:3)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11 {
  note: 'Exception occurred in retry method that was not classified as transient'
}
代码语言:javascript
复制
Node 12.14.0
Alpine 3.11.2
@google-cloud/monitoring v1.7.0
@google-cloud/pubsub v1.2.0
google-gax v1.13.0
@grpc/grpc-js v0.6.15
bluebird v3.7.2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-08 09:05:13

您的代码可以在节点10使用Bluebird promises (您可以查看它),但是在节点12中断,原因是:https://github.com/grpc/grpc-node/pull/942

因为它只影响gRPC (@grpc/grpc-js)的JavaScript实现,所以您可以要求发布/订阅库使用遗留的gRPC (用C++编写),它似乎工作正常:

代码语言:javascript
复制
$ npm install grpc
代码语言:javascript
复制
const grpc = require('grpc');
...
const pubSub = new PubSub({ grpc, keyFilename });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59621479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档