2016-11-16 79 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

相关问题