将 bluebirdjs 与 Google Cloud Datastore 节点客户端库一起使用
Using bluebirdjs with Google Cloud Datastore node client library
我在尝试将 bluebirds promises 与 google 的云客户端库一起使用时遇到了一个奇怪的问题。
在挖掘 Google 的库后,我注意到在常用函数中,有一个带有 promisify 函数的 util 文件。
我假设这些被用来承诺数据存储访问功能,因为它们可以用作承诺。
我的问题出现是因为我正在编写一个基于 PubSub 触发器执行的 Google Cloud Function。
在函数结束时,我需要执行 callback()
函数到 'end' 函数。
我想在 promise 上使用 bluebirds finally()
api 以确保始终调用回调。但是,当尝试访问数据存储时,它 returns 它是自己的 Promise 类型而不是 bluebird promise,即使我尝试调用:
const Promise = require('bluebird');
const Datastore = Promise.promisifyAll(require('@google-cloud/datastore'));
const datastore = Promise.promisifyAll(
Datastore({
projectId: 'xxxx'
}));
但这似乎并不符合'replace'Google对蓝鸟的承诺。有没有办法做到这一点?
我目前的解决方法:
dothing(value)
.then(function(){
return doAnotherThing(anothervalue);
})
.then(function(){
// Done
callback();
})
.catch(function(){
// Something went wrong
callback();
});
我知道这不是 那个 比 finally()
更重要,但它仍然感觉有点不雅
哎呀,这有点尴尬。因此,我不会为犯下如此明显的错误承担全部责任,而是会责怪 bluebird 文档。 (不是,完全是我没看好)
无论如何,为了将 bluebird 与数据存储一起使用,我只需要将 Async
附加到函数调用即可。
function doTheThing(keys){
return datastore.getAsync(keys);
}
超级简单
我在尝试将 bluebirds promises 与 google 的云客户端库一起使用时遇到了一个奇怪的问题。
在挖掘 Google 的库后,我注意到在常用函数中,有一个带有 promisify 函数的 util 文件。
我假设这些被用来承诺数据存储访问功能,因为它们可以用作承诺。
我的问题出现是因为我正在编写一个基于 PubSub 触发器执行的 Google Cloud Function。
在函数结束时,我需要执行 callback()
函数到 'end' 函数。
我想在 promise 上使用 bluebirds finally()
api 以确保始终调用回调。但是,当尝试访问数据存储时,它 returns 它是自己的 Promise 类型而不是 bluebird promise,即使我尝试调用:
const Promise = require('bluebird');
const Datastore = Promise.promisifyAll(require('@google-cloud/datastore'));
const datastore = Promise.promisifyAll(
Datastore({
projectId: 'xxxx'
}));
但这似乎并不符合'replace'Google对蓝鸟的承诺。有没有办法做到这一点?
我目前的解决方法:
dothing(value)
.then(function(){
return doAnotherThing(anothervalue);
})
.then(function(){
// Done
callback();
})
.catch(function(){
// Something went wrong
callback();
});
我知道这不是 那个 比 finally()
更重要,但它仍然感觉有点不雅
哎呀,这有点尴尬。因此,我不会为犯下如此明显的错误承担全部责任,而是会责怪 bluebird 文档。 (不是,完全是我没看好)
无论如何,为了将 bluebird 与数据存储一起使用,我只需要将 Async
附加到函数调用即可。
function doTheThing(keys){
return datastore.getAsync(keys);
}
超级简单