Javascript Firebase HttpScalable仿真器在React Native中阻止未处理的承诺拒绝
我有一个Firebase函数,可以通过uid搜索用户:Javascript Firebase HttpScalable仿真器在React Native中阻止未处理的承诺拒绝,javascript,typescript,firebase,react-native,Javascript,Typescript,Firebase,React Native,我有一个Firebase函数,可以通过uid搜索用户: export const findUserByUid = functions.https.onCall(async (data, context) => { const foundUser = await admin.auth().getUser(data.uid); if (foundUser) { return {user: foundUser.email}; } return
export const findUserByUid = functions.https.onCall(async (data, context) => {
const foundUser = await admin.auth().getUser(data.uid);
if (foundUser) {
return {user: foundUser.email};
}
return {user: null};
});
这些函数由以下命令提供:npm run build&&firebase仿真器:start--only函数
在React Native中,我以以下方式初始化Firebase:
import "firebase/firestore";
import "firebase/functions";
import firebase from "firebase";
let firebaseConfig: Object = {
...
};
const firebaseApp = firebase.initializeApp(firebaseConfig)
const firebaseStore = firebaseApp.firestore();
const firebaseAuth = firebaseApp.auth();
const firebaseFunction = firebaseApp.functions();
if (__DEV__) {
console.log("Initialize emulator for cloud functions");
firebaseFunction.useEmulator('localhost', 5001);
console.log(firebaseFunction)
}
export {firebaseStore, firebaseAuth, firebaseFunction};
调用firebase函数:
const findUser = async (): Promise<void> => {
const findUserByUid = await firebaseFunction.httpsCallable('findUserByUid')({uid: "mock"});
const result = findUserByUid.data;
console.log(result)
}
我做错了什么?firebase emulator套件中也没有任何记录
更新:Firebase功能
export const findUserByUid = functions.https.onCall(async (data, context) => {
try {
const foundUser = await admin.auth().getUser(data.uid);
if (foundUser) {
return {user: foundUser.email};
}
} catch (error) {
return new https.HttpsError("not-found", error);
}
return {user: null};
});
您是否为emulator设置了凭据,以便它可以与AdminSDK交互?如果直接在仿真器中调用函数会发生什么?您可以运行
firebase functions:shell
,然后直接在@ThomasKuhlmann处执行该函数,如果我直接在shell中调用该函数,则会得到响应,但也会出现以下错误:(节点:6820)未经处理的Promisejection警告:错误[ERR_HTTP_HEADERS_SENT]:无法在发送到客户端>的ServerResponse.setHeader(_http_outgoing.js:558:11)后设置头。在云函数中使用try/catch并正确记录错误时会发生什么?您可以稍后使用httpsErrors返回一个更有意义的响应@ThomasKuhlmann Yes然后我从shell中没有得到错误,但是通过调用firebaseFunction.httpscalable上的函数仍然没有成功
export const findUserByUid = functions.https.onCall(async (data, context) => {
try {
const foundUser = await admin.auth().getUser(data.uid);
if (foundUser) {
return {user: foundUser.email};
}
} catch (error) {
return new https.HttpsError("not-found", error);
}
return {user: null};
});