2016-11-16 48 views
0

下面是簡單的場景..如何將promise轉換爲節點js中的回調函數?

我想轉換火力文檔中給我的API,這些代碼..

我怎樣才能將其轉換爲回調函數?

var uid = "some-uid"; 

admin.auth().createCustomToken(uid) 
    .then(function(customToken) { 
    // Send token back to client 
    }) 
    .catch(function(error) { 
     console.log("Error creating custom token:", error); 
    }); 

這裏是文檔的鏈接..

https://firebase.google.com/docs/auth/admin/create-custom-tokens 
+0

不要!擁抱承諾! – Bergi

+0

你使用什麼承諾庫? – Bergi

回答

2

風格回調的承諾,像這樣調用它們:

.then(function(result) { 
    callback(null, result); 
}, function(error) { 
    callback(error); 
}); 

一些承諾庫也有幫助函數,比如Bluebirds .asCallback(callback)

+0

正常工作! thanx :) –

+0

如果回調函數在成功函數中拋出,你會得到一個未處理的拒絕 - 這不是你所期望的 - 你需要嘗試/捕獲錯誤,並在回調函數外拋出它,如果回調扔。 –

+1

@BenjaminGruenbaum實際上,如果回調拋出(它永遠不應該),我會*期望*未處理的拒絕,但是我們可以在''後面添加'.catch(process.emit.bind(process,「uncaughtException」)) then' – Bergi

1

這是非常簡單的:

function(uid, cb){ 
    admin.auth().createCustomToken(uid) 
    .then(function(customToken) { 
    cb(null, customToken); 
    }) 
    .catch(function(error) { 
     console.log("Error creating custom token:", error); 
     cb(error, null); 
    }); 
} 

:如果你想使用節點 - CB就像function callback(error, token){...}

+1

不要這樣做。如果'cb'拋出,它將被再次調用。 – Bergi

+0

@Bergi與它自己的錯誤,這不應該創造任何形式的遞歸,但你的解決方案更乾淨。 – bknights

+0

不,不是遞歸,但對於預期僅被調用一次的回調來說,仍然存在問題。 – Bergi