如何将promise转换为节点js中的回调?

Vis*_*dha 3 callback node.js promise firebase firebase-authentication

这是一个简单的场景..

我想将firebase文档中给出的这些代码转换为我的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);
  });
Run Code Online (Sandbox Code Playgroud)

这是文档的链接..

https://firebase.google.com/docs/auth/admin/create-custom-tokens 
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 9

如果要在promise上使用节点样式的回调,请像这样调用它们:

.then(function(result) {
    callback(null, result);
}, function(error) {
    callback(error);
});
Run Code Online (Sandbox Code Playgroud)

一些promise库也有它的辅助函数,比如Bluebirds .asCallback(callback).

  • 如果回调中成功函数抛出你有未处理的拒绝 - 这是不是你所期望的 - 你需要尝试/捕获错误,如果回调扔`throw`答应上下文之外. (2认同)
  • @BenjaminGruenbaum实际上我希望*如果回调抛出(它永远不应该),则会处理未处理的拒绝,但是我们可以在`之后添加`.catch(process.emit.bind(process,"uncaughtException"))` ` (2认同)

Ode*_*Niv 6

在 NodeJS > 8.2 中,您有一个require('util').callbackify()(与 相反require('util').promisify()):

const { callbackify } = require('util');

callbackify(() => admin.auth().createCustomToken(uid))((err, customToken) => {
  // ...
});
Run Code Online (Sandbox Code Playgroud)

或者,如果您有来自其他地方的回调:

const { callbackify } = require('util');

callbackify(() => promise)(callback);
Run Code Online (Sandbox Code Playgroud)

请注意,它接收一个返回promise而不是promise本身的函数,并且它返回一个接收回调但不接收回调本身的函数