2017-02-27 89 views
1

我目前正在與PG-承諾,藍鳥發電機:PG-承諾:空話

function * getOrRegisterCurrentFriendIfProvided(t) 

應該返回一個空的承諾(如果t.ctx.context是不確定的)
NB :

yield new Promise(function (resolve) { resolve({}) }); 

或調用另一個函數(即提供了一個結果)::

yield t.task.call(params.friend,anotherFunction); 
在純藍鳥一個例子

任何方式來表達我的空承諾pg-promise(不使用像t.none(「BYPASS查詢」))的查詢?

與下面的示例中,當我這樣做:

db.task(getOrRegisterCurrentFriendIfProvided) 
    .then(function(result){ 
     console.log(result) // gives me undefined 
    }) 

我不確定。我相信,這個問題occurer時t.ctx.context未定義

編輯:全碼:

function * getOrRegisterCurrentFriendIfProvided(t) { 
let params = t.ctx.context; 

if (params.hasOwnProperty("friend")) { 
    yield t.task.call(params.friend,anotherFunction); 
} else { 
    // returns a empty result ({}) promise , just to make promise chain not angry 
    yield new Promise(function (resolve) { resolve({}) }); 
} 

} 
+0

您需要爲您的問題添加'getOrRegisterCurrentFriendIfProvided'實現,否則不可能知道您在做什麼以及問題出在哪裏。 –

+0

剛剛添加並找到了解決方案,但它可能不是最好的解決方案 – jy95

+0

問題現在已經很明顯 - 您的回調中任何地方都沒有返回任何東西,那麼您期望從任務中返回什麼? :) –

回答

0

你是從任務獲得undefined的原因是因爲你的回調不返回任何東西。

它改成這樣:

function * getOrRegisterCurrentFriendIfProvided(t) { 
    let params = t.ctx.context; 
    if (params.hasOwnProperty("friend")) { 
     return yield t.task.call(params.friend, anotherFunction); 
    } 
} 

我也去掉了else一部分,因爲它是完全無用的出現,爲你使用它的方式,即返回什麼相同與undefined解決。

+0

謝謝。只需要有內在的下一個我的下一個然後......我懷疑要做它或使發電機返回一個空的對象值:{} – jy95