我有一個奇怪的問題,試圖在谷歌雲客戶端庫中使用bluebirds promise。 挖掘Google的libs後,我注意到在常用函數中,有一個具有promisify函數的util文件。 我假設這些被用來promisify數據存儲接口函數,因爲它們可以用作承諾。 我的問題出現了,因爲我正在編寫基於PubSub觸發器執行的Google Cloud Function。 在函數結束時,我需要執行callback()
函數來'結束'函數。在Google Cloud Datastore節點客戶端庫中使用bluebirdjs
我想在承諾中使用藍鳥finally()
api來確保始終調用回調函數。但是,當試圖訪問它返回它自己類型的承諾,而不是一個藍鳥承諾,即使我嘗試調用數據存儲:
const Promise = require('bluebird');
const Datastore = Promise.promisifyAll(require('@google-cloud/datastore'));
const datastore = Promise.promisifyAll(
Datastore({
projectId: 'xxxx'
}));
但這似乎不是沒有「取代」 Google對藍鳥的承諾。有沒有辦法做到這一點?
我目前的工作圍繞:
dothing(value)
.then(function(){
return doAnotherThing(anothervalue);
})
.then(function(){
// Done
callback();
})
.catch(function(){
// Something went wrong
callback();
});
我知道這是不是是比finally()
得多,但它仍然感覺有點不雅