将bluebirdjs与Google Cloud Datastore节点客户端库

时间:2017-05-20 13:25:37

标签: node.js google-cloud-datastore bluebird

我有一个奇怪的问题,试图在谷歌的云客户端库中使用蓝鸟承诺。 在挖掘了Google的库之后,我注意到在常用函数中,有一个带有promisify函数的util文件。 我假设这些用于宣传数据存储区访问功能,因为它们可以用作承诺。 我的问题是因为我正在编写基于PubSub触发器执行的Google Cloud Function。 在函数结束时,我需要执行callback()函数来“结束”该函数。

我想在promises上使用bluebirds finally() api以确保始终调用回调。但是,当尝试访问数据存储区时,它会返回它自己的Promise类型,而不是蓝鸟的承诺,即使我尝试调用:

const Promise = require('bluebird');
const Datastore = Promise.promisifyAll(require('@google-cloud/datastore'));
const datastore = Promise.promisifyAll(
Datastore({
projectId: 'xxxx'
}));

但这似乎并没有“取代”谷歌对蓝鸟的承诺。有没有办法做到这一点?

我目前的工作:

dothing(value)
.then(function(){
  return doAnotherThing(anothervalue);
})
.then(function(){
  // Done
  callback();
})
.catch(function(){
  // Something went wrong
  callback();
});

我知道

1 个答案:

答案 0 :(得分:0)

Welp,这有点令人尴尬。所以,我不会责怪蓝鸟文件,而是要承担这么明显的错误。 (不是,因为没有正确阅读,这完全是我的错)

无论如何,为了将bluebird与数据存储区一起使用,我只需要将Async附加到函数调用中。

function doTheThing(keys){
  return datastore.getAsync(keys);
}

超级简单