我有一个奇怪的问题,试图在谷歌的云客户端库中使用蓝鸟承诺。
在挖掘了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();
});
我知道
答案 0 :(得分:0)
Welp,这有点令人尴尬。所以,我不会责怪蓝鸟文件,而是要承担这么明显的错误。 (不是,因为没有正确阅读,这完全是我的错)
无论如何,为了将bluebird与数据存储区一起使用,我只需要将Async
附加到函数调用中。
function doTheThing(keys){
return datastore.getAsync(keys);
}
超级简单