Node.js 谷歌PubSub-throw“;“未找到”;获取新创建的主题时

Node.js 谷歌PubSub-throw“;“未找到”;获取新创建的主题时,node.js,async-await,gcloud,google-cloud-pubsub,Node.js,Async Await,Gcloud,Google Cloud Pubsub,我有一个函数,可以在服务器启动时创建主题和订阅 问题是我无法创建链接到新创建主题的订阅,GooglePubSub服务器会抛出一个NotFound错误 我甚至在主题创建后添加了20秒的超时,但没有任何改变 export async function init() { // promises.topics is an array of promises const topics = await Promise.all(promises.topics); console.log('YEAH

我有一个函数,可以在服务器启动时创建主题和订阅

问题是我无法创建链接到新创建主题的订阅,GooglePubSub服务器会抛出一个NotFound错误

我甚至在主题创建后添加了20秒的超时,但没有任何改变

export async function init() {
  // promises.topics is an array of promises
  const topics = await Promise.all(promises.topics);
  console.log('YEAH !!! TOPIC IS GOOD !', topics);
  // That works ! And it is created in my remote google PubSub
  await timeout(20000);

  console.log('Lets Check if it exists !!!');

  // promises.getTopics is an array of :
  // getTopics.push(pubSubClient.topic(topic.name).get());
  // That throws a NOT FOUND
  const get = await Promise.all(promises.getTopics);
  // Failes because Topics are not found
  const subscriptions = await Promise.all(promises.subscriptions);
}
当我签入Google日志时,创建的主题是在订阅oO之后创建的

我的承诺数组首先注入主题,然后是订阅承诺

当添加一个重试功能,每2秒钟重试10次时,它也不起作用

它甚至没有显示在google日志中,我认为他们的API上有一个缓存,只返回新处理的数据而不重新尝试

你有什么想法吗

谢谢:)

主题:

订阅错误:

编辑:


在我的promise数组中推送promise creation主题后,我通过添加一个超时('2000')来解决问题。

因此,当我创建promise数组时,如下所示:

 async function constructPromises() {
  const topics = [];
  const subscriptions = [];
   for (const topic of pubSubConfig.topics) {      
      subscriptions.push(createTopic(topic.name));

      // Have to add this timeout, otherwise the topic is not found oO
      await timeout(1000);
   }
   for (const topic of pubSubConfig.topics) {
     for (const sub of topic.subscriptions) {        
       subscriptions.push(createSubscription(topic.name, sub));
     }       
   }
   return { topics, subscriptions };
}
我必须添加此超时,否则gcloud无法找到主题

我认为这是因为gcloud在处理请求之前发送了解决承诺。 因此,当您创建订阅时,他无法找到主题。 但我无法证实这一点,有人知道为什么吗

我想删除这个超时,以获得一个更不可知的实现。 更奇怪的是,我发现如果你只是把承诺称为循环,就不需要超时

for (const topic of pubSubConfig.topics) {
    const topicResponse = await createTopic(topic.name);
    topics.push(topicResponse);
    for (const sub of topic.subscriptions) {
      const subResponse = await createSubscription(topic.name, sub);
      subscriptions.push(subResponse);
    }
  }
  return { topics, subscriptions };
}

所以我的问题解决了,但我脑子里仍然有一个问题:p

你介意把最后一次编辑作为答案发布吗?供将来参考。事实上,我会添加更多关于它的信息。我还有一个毫无疑问的问题;)谢谢你的提醒,很高兴知道!让我们看看是哪一个问题。我的问题对谷歌员工来说似乎也很有趣:DHello!我是GCP支持人员,我检查了你的答案。这种行为很奇怪,所以我建议你打开一个bug,发布你的情况,你以前尝试过什么,你是如何修复的,等等。如果可能的话,你能接受自己的答案吗?供社会人士日后参考。您可以稍后使用错误的结果对其进行编辑。