0

Вот простой сценарий ..Как преобразовать обещание в обратный вызов в узле js?

Я хочу, чтобы преобразовать эти символы, приведенные в firebase документации на мой апи ..

Как я могу преобразовать его в функцию обратного вызова?

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

Если вы хотите использовать node- обратные вызовы стиля по обещанию, вызовите их следующим образом:

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

Некоторые библиотеки обещаний также имеют вспомогательные функции для этого, такие как Bluebirds .asCallback(callback).

+0

! thanx :) –

+0

Если обратный вызов выбрасывает функцию успеха, у вас будет необработанное отклонение - чего вы не ожидаете - вам нужно попробовать/поймать ошибку и «выбросить» ее за пределы обещанного контекста, если обратный вызов бросил. –

+1

@BenjaminGruenbaum На самом деле я бы * ожидал * необработанное отклонение, если вызов обратного вызова (который никогда не должен), но да, мы могли бы добавить '.catch (process.emit.bind (process," uncaughtException "))' после ' затем' – 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); 
    }); 
} 

где центибар подобен function callback(error, token){...}

+1

Не делайте этого. Если 'cb' бросает, он будет вызываться снова. – Bergi

+0

@Bergi с собственной ошибкой, и это не должно создавать какой-либо рекурсии, но ваше решение чище. – bknights

+0

Нет, не рекурсия, но все же это проблематично для обратных вызовов, которые, как ожидается, будут вызваны только один раз. – Bergi

Смежные вопросы