2017-05-20 103 views
0

我有一個奇怪的問題,試圖在谷歌雲客戶端庫中使用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()得多,但它仍然感覺有點不雅

回答

0

韋爾普,即有點尷尬。所以,我不會爲製造這樣一個明顯的錯誤承擔全部責任,我會責備藍鳥文件。 (這不是,這完全是我的錯,因爲沒有正確閱讀)

無論如何,爲了使用藍鳥與數據存儲,我只需要追加Async函數調用。

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

超級簡單

相關問題